1

以下是有問題的代碼。類型轉換和。在Visual Studio中

void SomeClass::Init(const vector<string>& args) { 
    int argc = (int)args.size(); 
    //... 
} 

我在Windows 7 64位上的Visual Studio 2015 Update 3中工作。

我的問題是:根據我對運算符關聯性的理解,輸入cast(int)和成員選擇器。具有相同的優先級(請參閱下面的摘錄摘自「C++ Primer,5ed」),因此評估順序應由關聯性決定。但這個級別的關聯性是留下的,也就是說,表達式是從左到右進行評估的。所以(int)args首先被評估,將args轉換爲int。然後,args的int版本會嘗試調用它的不存在的大小函數,因此會導致編譯錯誤。但Visual Studio 2015不報告任何錯誤並按預期運行:右側的表達式首先調用size()函數,然後將返回的值轉換爲int。爲什麼?我對關聯性的理解是錯誤的還是我錯過了什麼?感謝您的幫助。

enter image description here

+0

你使用的不是函數轉換,而是c型轉換,它與成員訪問運算符具有不同的優先級。看[這裏](http://en.cppreference.com/w/cpp/language/operator_precedence)。 – songyuanyao

+0

@songyuanyao:謝謝。你是對的。你介意在回答我的問題時寫下你的想法嗎? – user5280911

回答