C++ 对象实例化
C++ object instantiations
这个问题是关于 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
是我用于此演示的简单 class:
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();
声明一个返回 Raisin 对象的函数(不带参数),而不是 default-constructed Raisin
这个问题是关于 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
是我用于此演示的简单 class:
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();
声明一个返回 Raisin 对象的函数(不带参数),而不是 default-constructed Raisin