在C++中,一组空的圆括号(括号)对调用默认构造函数无效,这有什么好的理由吗?
MyObject object; // ok - default ctor
MyObject object(blah); // ok
MyObject object(); // error
我似乎每次都自动键入“()”。 有什么理由不允许这样做吗?
相同的语法用于函数声明-例如函数object
,不接受参数并返回myobject
因为它被视为函数的声明:
int MyFunction(); // clearly a function
MyObject object(); // also a function declaration
最烦人的解析
这与众所周知的“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>{}};
这样,它就不可能被解释为函数声明。
问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数
问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造
我有一个有两个构造函数的类。我正在尝试使用 guice 工厂创建此类的实例。如果未传递任何参数,则应调用默认构造函数。如果传递了参数,则应调用带参数的构造函数。但目前即使我将参数传递给工厂方法,仍然会调用默认构造函数。带参数的构造函数根本不被调用。下面是我的工厂类。 以下是我尝试注入的构造函数。 下面是我在抽象模块实现类中的模块绑定。 下面是我如何调用构造函数。 我在这里做错了什么?任何帮助都将不
问题内容: 我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。他们将不得不为某些类创建构造函数,并为其添加一些方法。稍后,使用我提供的测试功能,他们将检查是否正常。 我想做的是 通过反思 创建一个我想测试的类的新实例。问题在于,有时 没有默认构造函数 。我不在乎, 我想创建一个实例并自己初始化实例变量 。有什么办法吗?很抱歉,如果以前已经有人问过这个问题,但我找不到任何答
问题内容: 以下是两种方法: 具有所有类属性的构造函数 优点:我必须输入确切数量的参数类型,所以如果出现错误,编译器会警告我(顺便说一句,有什么方法可以防止错误地在参数列表中切换两个Integer的问题?) 缺点:如果我有很多属性,则实例化行可能会变得很长,并且可能跨越两行或更多行 setter和默认的空构造函数 优点:我可以清楚地看到自己的设置,因此,如果我做错了什么,我可以在键入时立即查明它(
问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题
问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题
问题内容: 不知何故,在下面的Node类中,and变量在Node的所有实例之间共享。 有什么办法可以让我继续使用构造函数参数的默认值(在这种情况下为空列表),但要同时获取它们和拥有其自身的变量以及变量? 我正在使用python 3.1.2。 问题答案: 可变的默认参数通常不会执行您想要的操作。相反,请尝试以下操作: