Oracle Solaris Studio 12.2:C++ 用户指南

4.8 传递匿名类实例的地址

不允许获取临时变量的地址。例如,因为以下代码获取了构造函数调用创建的变量地址,所以这些代码是无效的。但是,如果使用 -features=extensions 选项,编译器将接受该无效代码。


class C {
  public:
    C(int);
    ...
};
void f1(C*);
int main()
{
  f1(&C(2)); // invalid
}

注意,可以通过使用显式变量来使该代码有效。


C c(2);
f1(&c);

函数返回时,临时对象被销毁。程序员应确保临时变量的地址没有留下。此外,销毁临时变量(例如 f1)时,临时变量中存储的数据会丢失。