Object obj(args...)
和Object{args...}
的行为取决于在Object
中定义的构造函数。
看看下面的例子:
#include <iostream>
#include <initializer_list>
struct A
{
A(int a, int b) {std::cout << "Came to A::A()\n";}
};
struct B
{
B(int a, int b) {std::cout << "Came to B::B(int, int)\n";}
B(std::initializer_list<int> in) {std::cout << "Came to B::B(std::initializer_list<int>)\n";}
};
int main()
{
A a1(10, 20); // Resolves to A(int, int)
A a2{10, 20}; // Resolves to A(int, int)
A a3{30}; // Does not resolve to anything. It's a compiler error.
B b1(10, 20); // Resolves to B(int, int)
B b2{10, 20}; // Resolves to B(std::initializer_list<int>)
B b3{30}; // Resolves to B(std::initializer_list<int>)
}
可能重复的[如何使用C++ 11均匀初始化语法?](http://stackoverflow.com/questions/7612075/how-to-use-c11-uniform-initialization-syntax) –
@MattMcNabb,这个问题问如何,这个问题问为什么。 – xmllmx
这个问题不问“为什么”,另一个问题涉及统一初始化的作用。 –