"错误:获取临时数组的地址"是什么意思?

Ala*_*ACK 1 c++

当我尝试运行以下内容时

// Example program
#include <iostream>
#include <string>

int* x;

int main()
{
  x = (int[5]) { 16, 2, 77, 40, 12071 };

  std::cout << x;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下消息 error: taking address of temporary array

这是什么意思?

Bat*_*eba 6

(int[5]) { 16, 2, 77, 40, 12071 }是一个匿名的临时.一旦分配完成,它就超出了范围.

这让你有一个悬垂的指针.它x在全局命名空间中没有任何区别.

使用std::vector代替; 利用初始化列表构建.

  • 值得一提的是熟悉C的人.如果我们删除C++包含并修复main的原型.这成了复合文字.它存在于封闭范围的持续时间内.两个堂兄语言之间的另一个有趣的区别. (3认同)
  • @Alan - 您不需要垃圾收集器来确定范围.一本好的[关于C++的书](/sf/ask/27176971/)应该解释一下. (3认同)