在下面的程序中,对象
A a
直接从花括号初始化列表 {A{}}
初始化:#include <iostream>
struct A {
int v = 0;
A() {}
A(const A &) : v(1) {}
};
int main() {
A a({A{}});
std::cout << a.v;
}
MSVC和GCC在此处打印0
,意味着发生了复制省略。而Clang执行复制构造函数并打印1
。
在线演示:https://gcc.godbolt.org/z/1vqvf148z
哪个编译器是正确的?