В C ++ вызывает ли инициализация ссылки или указателя с самим собой UB?

int &r1 = r1; // r1 0 initialized, `r1` references 0, not UB? int *p1 = p1; // p1 0 initialized, `p1` is a null ptr, not UB? int main() { int &r2 = r2; // reference to intermediate value. has UB ? int &r3 = r2; // Also has UB ? int *p2 = p2; // pointer to garbage location. has UB ? int *p3 = p2; // Also has UB ? return 0; }

Оценка неинициализированного указателя вызывает неопределенное поведение: Где именно стандарт C ++ говорит, что разыменование неинициализированного указателя является неопределенным поведением?

Но оцениваются ли указанные выше указатели / ссылки?

В этом вопросе я хотел спросить о следующих случаях:

  • Назначение ссылки на себя в области видимости файла и области блока.
  • Назначение указателя самому себе в области видимости файла и области блока.
  • Назначение неинициализированной ссылки другой ссылке.
  • Назначение неинициализированного указателя другому указателю.

Он компилируется?   —  person Dan    schedule 15.06.2021

Да, но может выдавать предупреждения, как и ожидалось.   —  person Dan    schedule 15.06.2021

Я получаю интересный результат для эталонной самоинициализации в области пространства имен — live — godbolt.org/z/W84nW5GYY Все компиляторы обнаруживают это, если объявление является локальным.   —  person Dan    schedule 15.06.2021

Что вы пытаетесь достичь? Это просто упражнение в непонятных причудах C ++?   —  person Dan    schedule 15.06.2021

@KamilCuk извините за опечатку, она исправлена.   —  person Dan    schedule 15.06.2021

Применима ли такая причуда только к указателям и ссылкам? Например, я не думаю, что int a = a; разрешено.   —  person Dan    schedule 15.06.2021

@tobias разрешено. подробнее об этом: stackoverflow.com/questions/67979228/   —  person Dan    schedule 15.06.2021

@Dan Разрешенный ответ относится только к int i = i;, а не int a = a;, который находится в другом контексте. Разница в продолжительности хранения. В этом отношении нет разницы между int и указателем.   —  person Dan    schedule 15.06.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!