Сообщение Re[7]: const reference nullptr от 15.07.2017 16:32
Изменено 15.07.2017 16:34 N. I.
Re[7]: const reference nullptr
prezident.mira:
PM>
А если никаких попыток создать объект вообще не предпринимается, это относится к "Before the lifetime of an object has started" или нет? Без авторитетного толкователя это правило можно интерпретировать как хочешь. Впрочем, если пример заменить на
то тут хоть как трактуй, получишь undefined behavior — либо из-за indirection, либо из-за попытки "to access a non-static data member or call a non-static member function of the object", что весьма доставляет, т.к. подобный код широко используется в C.
PM>
PM>Before the lifetime of an object has started but after the storage which the object will occupy has been allocated
А если никаких попыток создать объект вообще не предпринимается, это относится к "Before the lifetime of an object has started" или нет? Без авторитетного толкователя это правило можно интерпретировать как хочешь. Впрочем, если пример заменить на
#include <stdlib.h>
struct X
{
int n;
};
int main()
{
X *p = (X *)malloc(sizeof(int));
p->n = 1; // undefined behavior
free(p);
}
то тут хоть как трактуй, получишь undefined behavior — либо из-за indirection, либо из-за попытки "to access a non-static data member or call a non-static member function of the object", что весьма доставляет, т.к. подобный код широко используется в C.
Re[7]: const reference nullptr
prezident.mira:
PM>
А если никаких попыток создать объект вообще не предпринимается, это относится к "Before the lifetime of an object has started" или нет? Без авторитетного толкователя это правило можно интерпретировать как хочешь. Впрочем, если пример заменить на
то тут хоть как трактуй, получишь undefined behavior — либо из-за indirection, либо из-за попытки "to access a non-static data member or call a non-static member function of the object", что весьма доставляет, т.к. подобный код широко используется в C.
PM>
PM>Before the lifetime of an object has started but after the storage which the object will occupy has been allocated
А если никаких попыток создать объект вообще не предпринимается, это относится к "Before the lifetime of an object has started" или нет? Без авторитетного толкователя это правило можно интерпретировать как хочешь. Впрочем, если пример заменить на
#include <stdlib.h>
struct X
{
int n;
};
int main()
{
X *p = (X *)malloc(sizeof(X));
p->n = 1; // undefined behavior
free(p);
}
то тут хоть как трактуй, получишь undefined behavior — либо из-за indirection, либо из-за попытки "to access a non-static data member or call a non-static member function of the object", что весьма доставляет, т.к. подобный код широко используется в C.