MSVC компилирует ссылку привязки к временному объекту и принимает адрес временного объекта.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 MSVC компилирует ссылку привязки к временному объекту и принимает адрес временного объекта.

Сообщение Anonymous »

Почему это компилируется в MS Visual C++?

Код: Выделить всё

struct myClass{};

void func(myClass& arg){}

void main() {
func( myClass() );  // works even though func only takes myClass&
}                      // (not const myClass&!!)
Это работает и на других компиляторах или это специфично для MSVC (или даже ошибка компилятора?). Я даже могу получить ссылку на это значение следующим образом:

Код: Выделить всё

void func(myClass* arg){}

int main() {
func( &myClass() );
}
Это работает ТОЛЬКО с объектами, временно созданными с помощью конструктора. Это не будет работать с любым другим значением rvalue, например (myClass() + myClass()).

Подробнее здесь: https://stackoverflow.com/questions/165 ... -temporary
Ответить

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

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

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

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

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