2016-09-29 7 views
-2

なぜこのコードもコンパイルされますか? "+ +"演算子の意味は何ですか?"+ +"演算子の意味(++ではない)

#include <string> 
int main() 
{ 
    std::string c = "abc"; 
    c = c + + "d"; 
    c = c + + + "d"; 
    c = c + + + + "d"; 
    c = c + + + + + "d"; 
    printf("%s\n", c.c_str()); 
} 
+1

重複_ _ "C++の" - > "演算子の名前は何ですか?"あなたは薬を飲んでいる人ですか? –

+1

@LightnessRacesinOrbit私は閉じることができました。あなたがそれを再オープンして修正したいのであればいいでしょう。後ろの視界では、私はそれが最初に閉じてからそれを修正するのを待っていたはずです。 – NathanOliver

+1

@NathanOliver:質問は終了しました。そこには良いデュープがあります。しかし、時には奇妙なことに頭を振る。 –

答えて

1

これは単なるプラスです。

+7

あなたは...確かにですか? – Yakk

+1

ではありません*ただ*単項プラス " – jaggedSpire

6

+ +演算子はありません。 +演算子(単項式とバイナリ形式の両方で発生)と++演算子があり、ここでは使用されていません。

それぞれはバイナリ+オペレータであり、その後に1つ以上の単精度の+オペレータが続きます。

これ:

c = c + + + "d"; 

と等価である:

c = c + + "d"; 

この

c = c + (+ "d"); 

と等価ですまたは:

c = c + (+ (+ "d")); 

などです。

2

最初の+は、cと第2項の合計を計算するバイナリプラスです。

残りの+は、単項プラス演算子です。 + "d"では、"d"は、タイプconst char[2]であり、const char*に減衰します。次に、+が効果のないポインタに適用され、同じconst char*を返します。

c + + + "d"c + (+(+"d"))に相当します。

+1

' "d" 'は' char [1] 'ではなくconst char [2]'型を持ち、 'const char *'に崩壊します。 – hvd

+1

が固定されています。実際には 'const char * const'(constポインタ)であるかどうかわからない – tmlen

+1

非クラス型の小数点以下は' const'または 'volatile'修飾されていないので、' const char * 'だけです。シンプルなテストケース: 'const char * && str =" str ";' – hvd

関連する問題