不允许在C++中使用默认构造函数

Man*_* W. 0 c++ c++11

我正在尝试用C++创建一个禁止使用默认构造函数的类.
然而,我认为我失败了,或者我不理解幕后发生的事情.这是我到目前为止:

class Point {
public:
        float x;
        float y;
        Point(float newX, float newY); //Definition is irrelevant
        Point() = delete; //Default or "empty" constructor is forbidden, so deleted
}
/* ... */
int main(void)
{
        Point a(1, 2); //Ok, should be available
        Point b; //Ok, does not compile
        Point c(); //Not ok, it does compile :(
}
Run Code Online (Sandbox Code Playgroud)

我的预期行为是c点不编译.我很感激帮助产生这样的行为,或者如果不可能的话,解释为什么这样的行为.

先感谢您

Inc*_*ble 8

正在发生的是一个令人烦恼的解析.您没有声明一个对象,而是一个名为c且返回类型类的函数Point.


声明任何构造函数都会阻止编译器生成默认构造函数,因此声明=delete是超级流.


聚合初始化

如果你知道订单,你甚至不需要构造函数:

Point p{newX, newY};
Run Code Online (Sandbox Code Playgroud)

会工作得很好.


统一初始化语法

将来,为避免此类情况,请使用{}:

Point p{}; //default constructs
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

626 次

最近记录:

8 年 前