我正在尝试用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点不编译.我很感激帮助产生这样的行为,或者如果不可能的话,解释为什么这样的行为.
先感谢您
正在发生的是一个令人烦恼的解析.您没有声明一个对象,而是一个名为c且返回类型类的函数Point.
声明任何构造函数都会阻止编译器生成默认构造函数,因此声明=delete是超级流.
如果你知道订单,你甚至不需要构造函数:
Point p{newX, newY};
Run Code Online (Sandbox Code Playgroud)
会工作得很好.
将来,为避免此类情况,请使用{}:
Point p{}; //default constructs
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |