2016-09-29 33 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

沒有+ +運營商。有一個+運算符(它以一元和二元形式出現)和一個運算符++,這裏不使用。

每個那些的是二進制+操作者,接着通過一個或多個一元+運營商。

此:

c = c + + "d"; 

等同於

c = c + (+ "d"); 

此:

c = c + + + "d"; 

相當於:

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

或:

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

等等。

2

第一+是二進制加,其計算的c總和,第二項。

其餘+是一元加運算符。在+ "d","d"類型爲const char[2],衰減到const char*。然後+被應用於沒有效果的指針,並返回相同的const char*

c + + + "d"相當於c + (+(+"d"))。的_

+1

''d「'具有'const char [2]'類型,而不是'char [1]',並衰減到'const char *'。 – hvd

+1

已修復。不知道它是否實際上是'const char * const'(const指針) – tmlen

+1

非類類型的前值不能是const或volatile變量,所以它只是const char *。簡單的測試用例:'const char * && str =「str」;' – hvd

相關問題