我想使用 C++ 在堆栈中构造一个对象。 你知道这两种调用构造函数的方式(带括号和不带括号)有什么区别吗:
a)
MyClass object ;
b)
MyClass object() ;
我正在使用MFC,在为主应用程序构造全局变量时,如果我使用后一种方式,我会得到一个异常,我认为这两种方式是等效的。
谢谢大家提供的信息。
这是 C++ 的陷阱之一。
MyClass object();
是在 C++ 中定义函数 prototype 的方式,因此编译器认为您试图在另一个函数中间声明另一个函数。
如果您想调用默认构造函数(即不带参数的构造函数),请使用以下语法:
MyClass object;
另请参阅 Garth Gilmour 对现已删除的问题的回答 您(最不)最喜欢的语法陷阱是什么?:
在 C++ 中
Employee e1("Dave","IT"); //OK Employee e2("Jane"); //OK Employee e3(); //ERROR - function prototype
例如:
class MyClass
{
public:
MyClass()
{x = 0;}
MyClass(int X)
{x = X;}
private:
int x;
};
int main()
{
MyClass myObject(56); // initialize x to value '56'
MyClass myObject2; //calls default constructor and initializes x to 0
return 0;
}