2012-10-02 53 views
1

幾個問題的問題:使用gcc 4.7,如果該文本流包裹的std ::內部移動C++右值移動語義,大約流約語義和性能

x = 0; 
While (x < 10) { 
    std::cout << "Some text here to send to cout"; 
    ++x; 
} 

林?

像這樣:

x = 0; 
    While (x < 10) { 
     std::cout << std::move("Some text here to send to cout"); 
     ++x; 
    } 

而且,當我問,是不是更好的在這樣的情況下,只是讓靜態的字符串,如:

x = 0; 
While (x < 10) { 
    static const char* s = "Some text here to send to cout"; 
    std::cout << s; 
    ++x; 
} 
+0

無論如何,所有傳入的都是一個指針。 – chris

+0

你爲什麼期望這個舉動能夠提供幫助? –

回答

3

移動一個字符串字面量會不會真的你有什麼好處:它會在任何情況下產生一個指針,並且這個指針將被值傳遞。關於使字符串字面值靜態,我希望它沒有任何區別。

+0

非常感謝,這是否都是因爲編譯器優化?似乎反複製作一個字符串比在靜態內存中製作字符串要慢。 –

+0

@bryansammon與優化沒有任何關係。沒有反覆創建的字符串 - 這裏沒有涉及std :: string對象,並且字符串文字已經在靜態內存中。 – usta

+0

好吧,我明白了,所以如果它是一個std :: string,會有什麼區別嗎? –

1

否和否。 operator<<是否其const char *參數是右值還是左值沒有任何區別:在後一種情況下,標準左值到右值(純概念)轉換將在傳遞到operator<<之前自動應用。