2016-11-24 111 views
5

VS2015 Update 3編譯時沒有錯誤,也沒有警告。然而,我的印象是,臨時只能綁定到常量引用。這是不合格還是我誤解了某些東西?分配給非const引用

struct Foo {}; 
Foo Func6() { return Foo(); } 

TEST(Arguments, NonConstReference) 
{ 
    Foo& bob = Func6(); 
} 

編輯

通過marcinj聯的問題是同一個問題,雖然這個問題沒有具體關於VS2015,當我輸入這一個位置沒有確定。

我一直在使用/ W4看看,如果我得到一個警告,並沒有看到一個,但它的測試再測試,我發現,現在我做的。當打開項目屬性以調整設置時,VS2015習慣於顯示爲當前選定的一個不同的構建配置設置的屬性對話框,這是一種最多無用的行爲,並且我肯定會繼續這樣做)。

由於使用禁用語言擴展(/ ZA)在其他問題中提到使得這個錯誤,但不幸的是不是一個可用的解決方案是微軟自己的平臺頭不會再編譯。

回答

7

的MSVC編譯器有一個非標準擴展,默認情況下,它允許臨時變量綁定到非const引用啓用。要禁用此功能,請使用command-line option /Za或相應的項目屬性。

+0

永遠不要理解這個的用法。 –

+0

@GillBates當你有右值時更無用! –

+1

@GuillaumeRacicot當然,這個擴展將參數的參考時間至少延遲了十年,所以我認爲這是不公平的比較。 – Angew