首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:编译时取临时[-fpermissive]地址&(int) {}

错误:编译时取临时[-fpermissive]地址&(int) {}
EN

Stack Overflow用户
提问于 2014-08-13 18:56:34
回答 1查看 2.5K关注 0票数 1

几天前,我在回答复合文字 是吗?中发现了

所以我试着编译简单的代码:

代码语言:javascript
运行
复制
#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,它不构建:

代码语言:javascript
运行
复制
$ g++ main.c 
main.c: In function ‘int main()’:
main.c:4:23: error: taking address of temporary [-fpermissive]
  int * ptr = &(int) {3};
                       ^

是否有一种方法(如g++选项)支持复合文字?

EN

回答 1

Stack Overflow用户

发布于 2014-08-13 22:01:12

在C语言中,复合文字是lvalue。在C中将复合文字的地址取为C是完全合法的,在C中,一个本地的复合文字存在到其封闭块的末尾。

同时,GCC在C++ (作为一种非标准的扩展)中引入了复合文字,并有了一些重大变化。它们是作为临时物品被带过来的。在C++中获取临时对象的地址是非法的。C++中复音字的生命周期也与时间词的生命周期相一致--它们一直活到表达式的末尾。

AFAIK,没有办法使GCC的C++复合文字表现为他们的C对应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25294043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档