6

重複の可能性:
括弧のセットが空のデフォルト コンストラクターを呼び出す際のエラー

テストプログラムが添付されています。質問:

次のように宣言すると、オブジェクトは作成されず、デフォルトのコンストラクターは呼び出されません。「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_0\n"); };
  grCell(int i) { printf("HERE_1\n"); };
  ~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);


} 

// - - - 終わり - - -

4

2 に答える 2

7

grCell c3()とはどう違いgrCell c1ますか?

c11 つ目は関数を宣言し、2 つ目は typeという名前のオブジェクトを作成しますgrCell

grCell c3();

c3オブジェクトを作成しませんが、引数をとらず、 type のオブジェクトを返す名前の関数を宣言しますgrCell
これは、C++ で最も厄介な解析です。

于 2012-09-18T04:40:05.500 に答える
4

最も厄介な parseに遭遇しました。

grCell c3()を返すという名前の関数を宣言します。c3grCell

grCell c3grCellnamedのインスタンスを宣言しますc3

C++ には、「関数のように見えるものはすべて関数である」ということわざがあります。

コメントについて

grCell()どちらも値の初期化と呼ばれ、クラス型の場合はデフォルトのコンストラクターgrCell()を呼び出します。grCellただし、int()intは異なり、最初のバージョン 0 でオブジェクトが初期化されます。

于 2012-09-18T04:41:11.367 に答える