0
這個問題是關於C++中的對象實例化的。有幾種方法可以在堆和堆棧上實例化對象我很想知道細微的差異。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}
之間存在細微的差異。如果有人能夠闡明這些特質,我將不勝感激。
[最令人煩惱的解析](https://en.wikipedia.org /維基/ Most_vexing_parse) – AndyG