将构造函数作为方法调用

时间:2016-05-14 22:11:06

标签: c++ constructor

当我调用类似于此类的构造函数时,Class :: Class()是否认为该操作是一个简单的函数调用,或者它是否暗示了其他内容?

struct Point
{
   Point()
   {
      X = 100;
      Y = 100;
      cout << "Point ctor !\n";
   }
   int X;
   int Y;
};

在main中调用构造函数时,修改X和Y意味着内存中存在一个现有对象,对不对?那么下面的指令究竟意味着什么呢?在堆栈上创建一个包含两个字段的对象?那么这不是一个简单的函数调用吗?

int main()
{
   Point::Point();
}

1 个答案:

答案 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.
}