当我调用类似于此类的构造函数时,Class :: Class()是否认为该操作是一个简单的函数调用,或者它是否暗示了其他内容?
struct Point
{
Point()
{
X = 100;
Y = 100;
cout << "Point ctor !\n";
}
int X;
int Y;
};
在main中调用构造函数时,修改X和Y意味着内存中存在一个现有对象,对不对?那么下面的指令究竟意味着什么呢?在堆栈上创建一个包含两个字段的对象?那么这不是一个简单的函数调用吗?
int main()
{
Point::Point();
}
答案 0 :(得分:2)
似乎我的编译器已经过时了:
Point::Point(); // Is illegal.
但是
Point(); // Is fine.
在main中调用构造函数时,修改X和Y意味着内存中存在现有对象我是对的吗?
是。它创建了一个临时对象。临时对象在表达式结尾处超出范围(在本例中为“;”),此时它将被销毁。
那么下面的说明究竟意味着什么呢?
这是一种在表达式中创建临时对象的方法。虽然您通常不需要指定类名。
在堆栈中创建一个包含2个字段的对象?
那是未定义的。它使用两个字段创建一个临时对象(具有自动存储持续时间的对象)。没有为C ++语言定义的堆栈,因此这个概念毫无意义。
所以这不是一个简单的函数调用吗?
是的,调用构造函数来初始化临时对象。
int main()
{
std::cout << Point().Y; // Access the member of the temporary.
}