Может ли компилятор C++ предположить, что стандартные функции не были заменены и имеют другую семантику?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Может ли компилятор C++ предположить, что стандартные функции не были заменены и имеют другую семантику?

Сообщение Гость »


В коде

#include #include #include статический int foo = 2; int bar(int x) { вернуть х*фу; } недействительный баз () { //printf("%p\n", &foo); std::vector ptrs{&foo}; std::sort(ptrs.begin(), ptrs.end()); } g++ сгенерирует для bar реальный код умножения; однако, комментируя вызов printf std::sort, код оптимизируется для константы 2: это имеет смысл, поскольку известно, что, учитывая отсутствие «законного» способ изменить содержимое статической переменной foo (никто не знает ее адреса), превращает foo в константу, даже если она не объявлена ​​явно как таковая.

Мой вопрос... было бы законно, если бы компилятор C++ предположил, что printf std::sort не подойдет странные вещи, такие как сохранение переданного адреса и использование его позже или немедленно для изменения содержимого объекта int, на который он указывает, или совместимый компилятор C++ ДОЛЖЕН быть таким же параноиком, как g++?
Изменить
Изменено с printf("%p\n", &foo); на sort, поскольку вывод действительно может быть перенаправлен, указатель перестроен и foo мутирует даже при использовании «легального» кода C++, если выполняется вызов printf.

В стандартной версии std::sort это невозможно.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Плакат и иконка игры не могут быть заменены на разные картинки.
    Гость » » в форуме CSS
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Неожиданный вывод, когда данные std::cout float32 дважды заменены на _mm_shuffle_pi16.
    Anonymous » » в форуме C++
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Шрифты в фигурах SmartArt в презентации PowerPoint не были заменены должным образом при использовании Python
    Гость » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • Акценты заменены странным персонажем в Symfony 6.4 [дублировать]
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Переместить семантику для прозрачной функции/декоратора
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»