【发布时间】:2011-02-21 00:47:04
【问题描述】:
我不明白以下代码如何编译/不编译:
struct Temp
{
int i;
};
int main(int argc, char * argv[])
{
//Temp &ref1 = (Temp){42}; // Error, as expected
Temp &ref2 = *(Temp*)&(Temp){42}; // A-OK
std::cerr << ref2.i << std::endl;
return 0;
}
我使用的是 g++ 4.4.4。
【问题讨论】:
-
最近没有足够频繁地使用 C++ 来记住核心转储是否为您提供了有用的信息(如堆栈跟踪)。有没有办法提供该错误消息(可能在调试器下运行)?
-
这不是纯 C++ 代码,而是 GNU C++。它使用 C99 复合文字功能。
-
@Johannes Schaub- 感谢您指出这一点 - 我正在翻阅规范,试图找出它为什么有效!
-
@Merlyn Morgan-Graham - 别在意关于使用原语的评论,那是我对其他事情的愚蠢。