Ассоциативность между типом cast и. в Visual Studio

Ниже приведен код, о котором идет речь.

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

Я работаю в Visual Studio 2015 Update 3 в Windows 7 64-разрядной версии.

Мой вопрос: в соответствии с моим пониманием ассоциативности операторов, приведение типа (int) и выбор члена. имеет такой же приоритет (см. скриншот ниже, взятый из «C ++ Primer, 5ed»), поэтому порядок оценки должен определяться ассоциативностью. Но ассоциативность этого уровня остается левой, то есть выражение оценивается слева направо. Таким образом, (int) args сначала вычисляется, превращая args в int. Затем int версия args пытается вызвать его функцию размера, которая не существует и, следовательно, должна вызвать ошибку компиляции. Но Visual Studio 2015 не сообщает об ошибке и работает должным образом: выражение справа сначала вызывает функцию size (), а затем преобразует возвращаемое значение в int. Зачем? Мое понимание ассоциативности неверно или я что-то упускаю? Спасибо за помощь.

введите описание изображения здесь

1

Решение

Обратите внимание, что вы используете не функция приведения, но актерский стиль, который имеет более низкий старшинство чем член оператора доступа.

Так (int)args.size() эквивалентно (int) (args.size()) и работает хорошо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector