是否有任何充分的理由表明一组空的圆括号(圆括号)对于调用 C++ 中的默认构造函数无效?
MyObject object; // ok - default ctor
MyObject object(blah); // ok
MyObject object(); // error
我似乎每次都会自动输入“()”。有充分的理由不允许这样做吗?
最麻烦的解析
这与所谓的“C++ 最令人烦恼的解析”有关。基本上,任何可以被编译器解释为函数声明的内容都将被解释为函数声明。
同一问题的另一个例子:
std::ifstream ifs("file.txt");
std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());
v
被解释为具有 2 个参数的函数声明。
解决方法是添加另一对括号:
std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());
或者,如果您有 C++11 和列表初始化(也称为统一初始化)可用:
std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};
这样,它就无法被解释为函数声明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)