最近,我意识到,在C ++ 11我们可以称之为一个委托初始化列表构造状
Foo() : Foo{42} // delegate to Foo(initializer_list<>)
这是语法正确吗? 这似乎是,虽然我本来期望调用函数时,总是使用括号,如Foo({42})
下面的示例代码编译罚款在两个铛++和g ++
#include <iostream>
#include <initializer_list>
struct Foo
{
Foo() : Foo{42} // I would have expected invalid syntax, use Foo({42})
{
std::cout << "Foo()... delegating constructor\n";
}
Foo(std::initializer_list<int>)
{
std::cout << "Foo(initializer_list)\n";
}
};
int main()
{
Foo foo;
}
我深知统一初始化的,喜欢用声明的对象 { }
但不知道我们还可以调用构造函数。 我们不能调用函数虽然,以下不会编译 :
#include <initializer_list>
void f(std::initializer_list<int>){}
int main()
{
f{5}; // compile time error, must use f({5})
}
因此,要总结,我的问题是:是否有特殊规定委托构造函数,允许在仅使用大括号,就像调用初始化列表构造Foo{something}
?