gra*_*olf 11 c++ visual-c++ c++11
为什么以下代码在C++中是合法的?
bool a(false);
Run Code Online (Sandbox Code Playgroud)
我的意思是,T a(VALUE)应该调用构造函数,对吧?我想它不是作为函数声明解析的.但是bool是普通类型,它没有构造函数.或者是吗?
我正在使用Visual Studio 2012,如果它是相关的.
das*_*ght 26
尽管bool是原始类型,并且因此没有构造函数,但语言设计者引入了统一的初始化语法,该语法适用于基元和类.这大大简化了编写模板代码,因为您可以继续使用
T tVar(initialVal);
Run Code Online (Sandbox Code Playgroud)
语法,不知道T模板类型参数是否是原始的.这对模板设计者来说是一个非常重要的好处,因为他们不再需要根据原始类和类来考虑模板类型参数.
Vin*_*Pii 13
这只是初始化POD类型的有效语法,并且与构造函数(甚至是复制构造函数)具有相似的行为.
例如,以下内容有效:
bool a(false);
bool b(a);
bool c = bool(); // initializes to false
Run Code Online (Sandbox Code Playgroud)
值得注意的一件事是
int main(int argc, const char *argv[])
{
bool f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
f 是功能声明!
这与任何其他原始类型没有什么不同,例如
int a(5);
Run Code Online (Sandbox Code Playgroud)
原始类型没有构造函数,您调用的是直接初始化