2011-07-11 2 views
0

は、私は設定が何かへのポインタであると仮定しますが、ステートメントにカンマがあることができ、以下の行これはC++での有効な割り当てですか?私は、ライブラリのコードを見ていたが

int number = config.nodes,i,fanout=numP/2; 

を見つけましたか?そのような割り当てをしますか?

+0

@ Alsの答えはこちらhttp://stackoverflow.com/questions/6502819/comma-operator-and-comma-seperator-in-c –

答えて

8

これは3つの変数を宣言します。それは同じです:

int number = config.nodes 
int i; 
int fanout = numP/2; 

、C++も、ここで使用されていない「コンマ演算子」はカンマが宣言(と引数リスト)に特別に処理されていることに注意してください。

+2

カンマオペレータと混同しやすいので、それをすることをお勧めします。私は、個人的に、声明の最後の宣言で最初の譲渡のみを行います。 – bdonlan

+0

@bdonlan:面白いことに、コンマ演算子に言及して(対照的に)言わせてもらえると面白かったかもしれません。 –

+1

私は個人的には、各ステートメントで1つの宣言だけを行います。ここに来る人々を救い、「WTF?」と尋ねる。 :-) –

1

これは有効ですが、番号は表示されている行全体に割り当てられていません。

iおよびfanoutは、その時点で作成されている他の2つの整数であり、この時点でfanoutも初期化されています。一行はと等価であることを

int number = config.nodes; 
int i; 
int fanout = numP/2; 
+3

ねえ...私はこれに56秒遅れて答えました。 haha –

1

その基本的に多くの宣言:これは次のようになり書き込みに

int number = config.nodes; 
    int i; 
    int fanout=numP/2; 
0

より認識方法:

int number, i, fanout; 
number = config.nodes; 
fanout = numP/2; 

私は個人的になりあなたの例のようなものを書いてはいけません。なぜなら、読者がg耳を傾ける。

1)空白は常にC++コンパイラによって無視されます。

+3

普通の 'int'の場合はそれほど重要ではありませんが、バリエーションは初期化の代わりに代入を使います。 –

0

は、私は、次の追加を持っています。だから、

int number = config.nodes,i,fanout=numP/2; 

はここにカンマが私は宣言するために複数の変数を持っているコンパイラに伝えることです

// declaring three variables number, i and fanout 
int number=config.nodes, i, fanout = numP/2; 

に相当します。したがって、番号はconfig.nodesで初期化されます。上記のようにconfigがポインタの場合、.演算子を使用してメンバ変数にアクセスすることはできません。 .の代わりに->を使用する必要があります。

2)次の行は異なるセマンティックを持っている:カッコ内

// only one variable will be declared, which is number 
int number = (config.nodes,i,fanout=numP/2); 

は表現であり、ここでコンマがコンマ演算子です。この場合、config,i,fanout、およびnumPが前に定義されている。カンマ演算子の値は、最後の式fanout=numP/2の値です。

関連する問題