< 主キーを別のファイルグループに作成したくても・・・ | error C2360: 'i' の初期化が 'case' ラベルによって行われませんでした。 >

March 1, 2004

int foo(1);

int nList(1);

仕事で、他人のソースを見ていたら、関数内にこんな記述を見つけました。一瞬、配列かなと思ったんだけど、丸括弧です。クラスで引数をとるコンストラクタならわかるのですが、int型です。でも、前後の流れから、どうやら値が1のint型の変数を宣言しているようです。ためしにこんなのを作ってみました。

#include "stdafx.h"
#include "cstdio"

int main(int argc, char* argv[])
{
	int foo(5);			// じゃ、5を入れてみよう
	printf( "foo は %d\n", foo );
	return 0;
}

実行結果。予想通りです。

foo は 5

ちなみに、拡張子を"cpp"から"c"に変えてコンパイルしようとすると、

error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2143: 構文エラー : ';' が 'constant' の前に必要です。
error C2059: 構文エラー : ')'

とかいっぱい警告が出ました。C++特有の新構文なのでしょうか。そのような情報は見つけられなかったのですが。

以下はVC++のヘルプ「初期化子」より

初期化子には、2 つの基本的な型があります。
  • 等号構文を使って指定する初期化子
  • 関数形式の構文を使って指定する初期化子
関数形式の構文で初期化できるのは、コンストラクタを含むクラスのオブジェクトだけです。2 つの構文の形式は、アクセス制御の点と、テンポラリ オブジェクトを使うかどうかという点でも異なります。宣言子で初期化子を指定する例を次に示します。
int      i = 7;                  // Uses equal-sign syntax.
Customer Cust( "Taxpayer, Joe",  // Uses function-style
               "14 Cherry Lane", //  syntax. Requires presence
               "Manteca",        //  of a constructor.
               "CA" );

これを読む限りでは、int型のような基本型では、上のような書き方はできないように思えますが・・・違うの?

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/217

コメント

デフォルトのコピーコンストラクタってやつですね。
同じ型の値を引数にとるコンストラクタです。

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?