なぜこのコードもコンパイルされますか? "+ +"演算子の意味は何ですか?"+ +"演算子の意味(++ではない)
#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());
}
なぜこのコードもコンパイルされますか? "+ +"演算子の意味は何ですか?"+ +"演算子の意味(++ではない)
#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 = c + + + "d";
と等価である:
c = c + + "d";
この
c = c + (+ "d");
と等価ですまたは:
c = c + (+ (+ "d"));
などです。
最初の+
は、c
と第2項の合計を計算するバイナリプラスです。
残りの+
は、単項プラス演算子です。 + "d"
では、"d"
は、タイプconst char[2]
であり、const char*
に減衰します。次に、+
が効果のないポインタに適用され、同じconst char*
を返します。
c + + + "d"
はc + (+(+"d"))
に相当します。
重複_ _ "C++の" - > "演算子の名前は何ですか?"あなたは薬を飲んでいる人ですか? –
@LightnessRacesinOrbit私は閉じることができました。あなたがそれを再オープンして修正したいのであればいいでしょう。後ろの視界では、私はそれが最初に閉じてからそれを修正するのを待っていたはずです。 – NathanOliver
@NathanOliver:質問は終了しました。そこには良いデュープがあります。しかし、時には奇妙なことに頭を振る。 –