首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11初始化语法问题(含gcc 4.5 / 4.6)

C++11初始化语法问题(含gcc 4.5 / 4.6)
EN

Stack Overflow用户
提问于 2011-01-03 11:04:09
回答 2查看 804关注 0票数 4

下面的C++11代码有什么问题:

代码语言:javascript
复制
struct S
{
    int a;
    float b;
};

struct T
{
    T(S s) {}
};

int main()
{
    T t(S{1, 0.1});  // ERROR HERE
}

gcc在标示的行上给出了一个错误(我尝试了gcc 4.5和gcc 4.6的实验版本)

这是无效的C++11,还是gcc的实现不完整?

编辑:以下是编译器错误:

代码语言:javascript
复制
test.cpp: In function int main():
test.cpp:14:10: error: expected ) before { token
test.cpp:14:10: error: a function-definition is not allowed here before { token
test.cpp:14:18: error: expected primary-expression before ) token
test.cpp:14:18: error: expected ; before ) token
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-03 11:22:07

根据proposal N2640,您的代码应该可以工作;应该创建一个临时S对象。显然,g++试图将此语句解析为声明(函数t期望S),因此在我看来它就像是一个bug。

票数 3
EN

Stack Overflow用户

发布于 2011-01-03 17:56:53

调用不带括号的构造函数似乎是错误的,这似乎是有效的:

代码语言:javascript
复制
struct S
{
    int a;
    float b;
};

struct T
{
    T(S s) {}
};

int main()
{
    T t(S({1, 0.1}));  // NO ERROR HERE, due to nice constructor parentheses
    T a({1,0.1}); // note that this works, as per link of Martin.
}

你的例子不起作用似乎是合乎逻辑的(至少对我:s来说是这样)。用vector<int>替换S会得到相同的结果。

代码语言:javascript
复制
vector<int> v{0,1,3}; // works
T t(vector<int>{0,1,2}); // does not, but
T t(vector<int>({0,1,2})); // does
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4581817

复制
相关文章

相似问题

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