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

回答