【发布时间】:2014-08-13 18:56:34
【问题描述】:
我几天前在答案How do I use setsockopt(SO_REUSEADDR)?中发现了Compound literals
所以我尝试编译简单的代码:
#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++ 选项)支持复合文字?
【问题讨论】:
-
g++ 很好地支持复合文字,它只是不允许您获取一个的地址,这是明智的。它也不允许您获取其他类型文字的地址,例如
int* p = &3;,这也是明智之举。说int i = (int){3}; printf("%d\n", i);而不是尝试获取其地址有什么问题?
标签: gcc g++ compound-literals