Я думаю, что это правильный код в MSVC:Инициализировать указатель на примитивный временный объект
MyClass* pMc = &MyClass();
Однако, когда я пытаюсь сделать то же самое с примитивными типами данных я получаю ошибка компиляции.
int* pInt = &int();
Ошибка:
error C2101: '&' on constant
У меня есть 3 вопроса:
- Почему
int()
дают мне постоянный? - Почему ошибка C2101 существует в первую очередь? что случилось с получением адреса константы?
- Есть ли способ, который я мог бы объявить int (или другие примитивные) ссылки, указывающие на временные объекты? (То есть, без создания локальной переменной первого)
О 3 вопроса:
Я не хотите сделать что-то вроде этого:
int i = int();
int* pInt = &i;
Если я работаю со ссылками на локальные объекты (причины, по которым они неактуальны), я не хочу, чтобы каждый день объявлял каждый объект. Это утомительно, раздражает, и имена будут действительно запутанными.
Вы понимаете, что 'int()' потенциально совпадает с '0'? Таким образом, ваше утверждение эффективно эквивалентно '& 0', что не имеет большого смысла. – 0x499602D2
Также '& MyClass()' не вполне допустимый код, он не должен компилироваться.MSVC++ глупо это допускает. –
Неконстантные ссылки на временные разделы запрещены стандартом, хотя MSVC имеет расширение, чтобы обойти это. Лучше не пытаться взломать решение с неопределенным поведением. – chris