不允许获取临时变量的地址。例如,因为以下代码获取了构造函数调用创建的变量地址,所以这些代码是无效的。但是,如果使用 -features=extensions 选项,编译器将接受该无效代码。
class C { public: C(int); ... }; void f1(C*); int main() { f1(&C(2)); // invalid } |
注意,可以通过使用显式变量来使该代码有效。
C c(2); f1(&c); |
函数返回时,临时对象被销毁。程序员应确保临时变量的地址没有留下。此外,销毁临时变量(例如 f1)时,临时变量中存储的数据会丢失。