Вопрос

Кто-нибудь может сказать мне, какой эффект дает это приведение (помимо установки happyNumber равным 1337), если оно вообще есть, и если оно не имеет другого эффекта, как получилось, что я могу написать подобный код???Это ошибка компилятора или какая-то "скрытая функция" C ++?

int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);

Я был удивлен, что это вообще скомпилировалось.Я нашел это из-за ошибки, из-за которой я случайно установил второму параметру значение, которое должно было использоваться при вызове функции приводимого выражения.Это привело к неприятной ошибке, когда объект был приведен из второго параметра, вызывая функцию только с одним аргументом.Он компилировался...И изначально не взорвался...

Я использую Microsoft Visual C ++ 2008.

Это было полезно?

Решение

Статическое приведение принимает один аргумент, но его аргументом является выражение, а выражения могут включать оператор запятой.Запятая используется в ситуациях, когда вы хотите оценить два или более выражения одновременно на предмет их побочных эффектов, например:

int i, j;
for (i=0, j=0; i < 10; i++,j++) {
    // do stuff
}

Это несколько полезно, потому что без него вы могли бы вычислять только по одному выражению для инициализатора, условия и продолжения частей цикла for (или любого другого места, где ожидается выражение).Однако обычно это не приводит к созданию максимально понятного кода, да и семантика у него странная.Как вы заметили, последовательность, разделенная запятыми, вычисляется по значению своего последнего выражения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top