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