Ker*_* SB 4 c++ gcc initialization c++11
我在测试一些关于初始化聚合的问题时遇到了这个问题.我正在使用GCC 4.6.
当我使用列表初始化聚合时,所有成员都是在适当的位置构建的,无需复制或移动.以机智:
int main()
{
std::array<std::array<Goo,2>,2>
a { std::array<Goo,2>{Goo{ 1, 2}, Goo{ 3, 4}} ,
std::array<Goo,2>{Goo{-1,-2}, Goo{-3,-4}} };
}
Run Code Online (Sandbox Code Playgroud)
让我们通过制作一些嘈杂的构造函数来确认:
struct Goo
{
Goo(int, int) { }
Goo(Goo &&) { std::cout << "Goo Moved." << std::endl; }
Goo(const Goo &) { std::cout << "Goo Copied." << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)
运行时,不会打印任何消息.但是,如果我将移动构造函数设为私有,则编译器会抱怨‘Goo::Goo(Goo&&)’ is private,尽管显然不需要移动构造函数.
有没有人知道是否有一个标准的要求移动构造函数可以像这样进行聚合初始化?