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
コメント
デフォルトのコピーコンストラクタってやつですね。
同じ型の値を引数にとるコンストラクタです。