gpt4 book ai didi

c++ - 带空括号的默认构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:52 24 4
gpt4 key购买 nike

是否有任何充分的理由表明一组空的圆括号(圆括号)对于调用 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>{}};

有了这个,就不可能将其解释为函数声明。

关于c++ - 带空括号的默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53382737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com