几天前,我在回答复合文字 是吗?中发现了
所以我试着编译简单的代码:
#include <stdio.h>
int main()
{
int * ptr = &(int) {3};
printf("%d\n", *ptr);
return 0;
}使用gcc 4.9.1,它按照预期的方式构建和工作,打印"3“,valgrind不报告内存损坏。
但是,使用g++ 4.9.1,它不构建:
$ g++ main.c
main.c: In function ‘int main()’:
main.c:4:23: error: taking address of temporary [-fpermissive]
int * ptr = &(int) {3};
^是否有一种方法(如g++选项)支持复合文字?
发布于 2014-08-13 22:01:12
在C语言中,复合文字是lvalue。在C中将复合文字的地址取为C是完全合法的,在C中,一个本地的复合文字存在到其封闭块的末尾。
同时,GCC在C++ (作为一种非标准的扩展)中引入了复合文字,并有了一些重大变化。它们是作为临时物品被带过来的。在C++中获取临时对象的地址是非法的。C++中复音字的生命周期也与时间词的生命周期相一致--它们一直活到表达式的末尾。
AFAIK,没有办法使GCC的C++复合文字表现为他们的C对应。
https://stackoverflow.com/questions/25294043
复制相似问题