【发布时间】:2019-08-28 09:00:06
【问题描述】:
考虑以下 C++11 代码:
#include <initializer_list>
struct MyStruct {
MyStruct() {}
MyStruct(const MyStruct& other) {}
void doStuff() const {}
};
int main() {
MyStruct a;
auto b{a};
a.doStuff();
b.doStuff();
return 0;
}
我期待 b 是 MyStruct 的一个实例,从 a 复制构造,但是,当使用 GCC 4.9.1 编译时,b 是 std::initializer<MyStruct>。 GCC 8.2 按预期编译。
注意我在 Godbolt 上做了一个例子:https://godbolt.org/z/adNDoO
您能解释一下这两个编译器版本之间的区别吗? (或者标准对此有何规定?)
【问题讨论】:
-
但是为什么这两个版本的编译器有区别呢?