有没有什么好的理由在C++中调用默认构造函数时,一组空的圆括号(括号)无效?
MyObject object; // ok - default ctor
MyObject object(blah); // ok
MyObject object(); // error
Run Code Online (Sandbox Code Playgroud)
我似乎每次都自动输入"()".是不是有一个很好的理由不允许这样做?
c++ constructor c++-faq default-constructor most-vexing-parse
我是C++的新手,我目前正在学习构造函数.假设我有一个带有构造函数的类Dog:
class Dog{
Dog(){
std::cout << "Constructor called!
}
};
Run Code Online (Sandbox Code Playgroud)
我知道在C++中有不同的方法(如果我没有弄错的话)我们可以创建一个对象,例如:
1- Dog dog;
2- Dog dog = Dog();
3- Dog *dog = new Dog;
4- Dog *dog = new Dog();
5- Dog dog();
Run Code Online (Sandbox Code Playgroud)
但事情就是这样:1到4的语句都调用构造函数,但语句编号5没有,我可以找出原因.
你知道为什么第五个语句没有调用类构造函数吗?谢谢.
我正在尝试用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点不编译.我很感激帮助产生这样的行为,或者如果不可能的话,解释为什么这样的行为.
先感谢您