Порядок аргументов функции в C ++ - PullRequest
2 голосов
/ 23 января 2011

Я читал " Bjarne Stroustrup's C ++ Style and Technique " FAQ, где он упоминал об этом FAQ Какое значение i ++ + i ++?

В этом он упомянул «... порядок вычисления аргументов функции не определен». когда он ссылается на f (v [i], i ++); Пример.

Мне известно, что порядок вычисления аргументов функции не указан не определен, но в данном случае он не определен, поскольку мы полагаемся на значение i, чтобы передать v [i] или это ошибка в самом FAQ?

Ответы [ 2 ]

4 голосов
/ 23 января 2011

Порядок вычисления аргументов функции не указан, но поведение выражения не определено. Бьярне только что понял это неправильно. : -)

Изучите этот поток , чтобы понять разницу между неопределенным поведением и неопределенным поведением.

Однажды я спросил Бьярне о разнице между unspecified и undefined, и это был его ответ ..

Лично меня не беспокоит различие между "неопределенным" и "неопределенным"; ты знаешь что это? Этот код должен быть извлечен и снят в любом случае: (тщательно избегая слов «неопределенный» и «неопределенный»)

.....

Тебе не нужно знать: просто избегай обоих. Если кто-то действительно хочет знать, он может поискать определения в стандартах C ++ или C (могу поспорить, что стандарты C и C ++ не согласятся на незначительные детали).

0 голосов
/ 14 июля 2011

Я думаю, что мы здесь потеряли семантику.Спецификация - это определение, прямо или бездействие.Большая часть неопределенного поведения была оставлена, чтобы позволить оптимизацию через поведение, определяемое реализацией, что приводит к неопределенному поведению, по крайней мере, если вы перемещаете свой код на другие компиляторы или оборудование, поэтому ваш код теряет универсальность, а также, вероятно, теряет ясность и простоту.Как также говорит Брайан Керниган, код, который пытается использовать потенциальные «побочные эффекты», часто не является хорошим стилем.Но было забавно видеть, что кто-то указывает Бьярну Страуструпу на «ошибки».:)

...