相关疑难解决方法(0)

如何在C++中创建临时对象

我有以下代码.

class A {
 public:
  A(int) {
  }
};

int a;
int main() {
  A(a);  // Line 'a
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想在第一行做的是A用构造函数创建一个临时的A::A(int).我知道它会立即毁灭.这就是我想要的.但似乎编译器正在做一些等价的事情A a,a在类中定义变量A并使用构造函数初始化它A::A().当然它不存在,因此编译错误.

但是,如果我将我的代码更改为以下内容.

class A {
 public:
  A(int) {
  }
};

void f(A) {
}

int a;
int main() {
  f(A(a));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它现在工作正常.编译器构造一个临时的A并使用它来调用f.

为什么A(a)两种情况都不同?它是如何在标准中或出于某些模糊的原因陈述的?如何在第一个代码示例中构造临时对象?

c++

15
推荐指数
2
解决办法
3964
查看次数

标签 统计

c++ ×1