type cast 和 之间的关联性。在 Visual Studio

Associativity between type cast and . in Visual Studio

以下是有问题的代码。

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

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

我的问题是:根据我对运算符结合性的理解,type cast (int) 和 member selector 。具有相同的优先级(请参阅下面摘自 "C++ Primer, 5ed" 的屏幕截图),因此评估顺序应由关联性决定。但是这一层的结合性是左的,即表达式是从左到右求值的。所以 (int)args 首先被求值,把 args 变成一个 int。然后 args 的 int 版本尝试调用其不存在的 size 函数,因此应该会导致编译错误。但是Visual Studio2015没有报错,运行正常:右边的表达式先调用了size()函数,然后将返回值转为int。为什么?我对结合性的理解是错误的还是我遗漏了什么?谢谢你的帮助。

请注意,您使用的不是 function cast, but c-style cast, which has lower precedence 成员访问运算符。

所以 (int)args.size() 相当于 (int) (args.size()) 并且效果很好。