This question already has answers here:
Default constructor with empty brackets
                                
                                    (9个答案)
                                
                        
                                3年前关闭。
            
                    
这个问题与C ++中的对象实例化有关。有几种方法可以在堆和堆栈上实例化对象,我很好奇知道这些细微的区别。

using namespace std;

class Raisin
{
private:
    int x;
public:
    Raisin():x(3){}
    Raisin(int input):x(input){}
    void printValue()
    {
       cout<< "hey my Deliciousness is: " << x <<endl;
    }
};


基本上Raisin是我用于此演示的简单类:

int main()
{

Raisin * a= new Raisin;
a->printValue();

Raisin * b= new Raisin{};
b->printValue();

Raisin * c= new Raisin();
c->printValue();

Raisin x;
x.printValue();

Raisin y{};
y.printValue();

Raisin z();
z.printValue();
//error: request for member 'printValue' in 'z',
//which is of non-class type 'Raisin()'


Raisin alpha(12);
alpha.printValue();

Raisin omega{12};
omega.printValue();

return 0;
}


我想知道为什么Raisin * c可以用空括号实例化,但是Raisin z不能。 (实际上Raisin z()是合法的,但不正确)

我也理解Raisin (2)Raisin{2}之间有细微的差别。如果有人可以阐明特质,我将不胜感激。

最佳答案

这条线

Raisin z();


声明一个函数(不带参数)返回葡萄干对象,而不是默认构造的葡萄干

关于c++ - C++对象实例化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34658303/

10-11 22:38