C++声明一个带括号的对象

C++ declare an object with parenthesis

本文关键字:对象 一个 声明 C++      更新时间:2023-10-16

可能的重复项:
使用空括号集调用默认构造函数时出错

我附有一个测试程序。问题:

如果我像下面这样声明,则没有创建对象和不调用默认构造函数。 'grCell c3();' 坏

然而像这样声明是可以的。创建一个对象并调用其构造函数。 'grCell c1;'//好

'grCell c3()' 和 'grCell c1' 有什么区别?

谢谢!

托德

//----开始-------

#include <iostream>
#include <cstdio>
typedef unsigned int uint;
using namespace std; 
//
class grCell {
 public:
  grCell()      { printf("HERE_0n"); };
  grCell(int i) { printf("HERE_1n"); };
  ~grCell() {};
  void setX(int x) { _x = x; }
  //
  //
private:

  int  _x:22;
};
int main()
{
  grCell c1;  // good
  c1.setX(100);

  grCell c3();  // bad
  c3.setX(100);
  grCell c2(5);
  c2.setX(10);

} 

//------结束------

grCell c3()grCell c1有什么区别?

第一个声明一个函数,而第二个创建一个名为 c1 的对象,类型为 grCell

grCell c3();

它不创建对象,但声明一个名为 c3 的函数,该函数不带任何参数并返回类型为 grCell 的对象。
这是C++中最令人烦恼的解析

你遇到了最烦人的解析。

grCell c3()声明一个名为 c3 的函数,该函数返回一个grCell

grCell c3声明一个名为 c3grCell实例。

在C++,有句谚语,"任何看起来像函数的东西,都是函数"。

关于评论

grCell()称为值初始化,如果默认构造函数是类类型,则grCell()grCell调用默认构造函数。但是,int()int不同,第一个版本零初始化对象。

相关文章: