Вопросы

В 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

Читать:
указатель на указатели для односвязного списка в C

Я получаю интересный результат для эталонной самоинициализации в области пространства имен — 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

Похожие записи

Я не могу запустить простой код с помощью pyaudio — [Errno -9996] Недопустимое устройство вывода (нет устройства вывода по умолчанию)

admin

Как получить идентификатор рабочей области из набора изменений в TFS?

admin

Как сохранить контекст пользователя с токеном AAD B2C

admin

Случайные сбои в iOS — Xamarin Forms — EXC_BAD_ACCESS (SIGSEGV) — KERN_INVALID_ADDRESS по адресу 0x0000000000000000

admin

Python3: установка в virtualenv не выполняется

admin

вычислить средние и совпадения из нескольких матриц

admin