170 похожих чатов

27 ответов

24 просмотра

Во первых это copy/move конструктор

Ramil-Rizvanov Автор вопроса

Это просто вызов конструктора. Такой есть в примерах стандарта [Note 1: Because constructors do not have names, they are never found during unqualified name lookup; however an explicit type conversion using the functional notation ([expr.type.conv]) will cause a constructor to be called to initialize an object. The syntax looks like an explicit call of the constructor. — end note] [Example 2: complex zz = complex(1,2.3);

Нет

можете сами пробежаться по началам пунктов в списках, чтобы понять, что copy elision тут никаком боком http://eel.is/c++draft/class.copy.elision#1 http://eel.is/c++draft/class.copy.elision#3

@dpaukaev кстати http://eel.is/c++draft/dcl.init#general-16.6.1

Vlad
@dpaukaev кстати http://eel.is/c++draft/dcl.init#g...

https://godbolt.org/z/bqrTMnc6x не понятно чем ему мув конструктор тогда мешает)

Denis P
https://godbolt.org/z/bqrTMnc6x не понятно чем ем...

по моему там вполне понятное сообщение об ошибке.

Denis P
https://godbolt.org/z/bqrTMnc6x не понятно чем ем...

этот код успешно компилируется в режиме С++17 и новее этот пункт (dcl.init#general-16.6.1) приехал вместе с прочими формулировками copy elision в [p0135] я согласен, что концептуально в S s = S() опускается лишний вызов оператора перемещения, и таково было намерение автора бумаги, но с точки зрения стандарта copy elision это вполне конкретное явление, разрешенное в закрытом перечне контекстов, и рассматриваемый случай в них не входит

Vlad
этот код успешно компилируется в режиме С++17 и но...

P0135R0: Guaranteed copy elision through simplified value categories (by Richard Smith) (2015-09-27) P0135R1: Wording for guaranteed copy elision through simplified value categories (by Richard Smith) (2016-06-20)

Denis P
в чем оно понятное?

Стандарты имеют свойство изменяться :)

我が名はレギオン
Это просто вызов конструктора. Такой есть в приме...

Если отключить copy-ellision, то там будет вызов мув конструктора https://godbolt.org/z/4sK71fsde

Ramil-Rizvanov Автор вопроса
Ilya Zviagin
Нет

можно подробней? перечитал cppref , там все сводится к вызову конструктора, который сведется к copy elision

Ilya Zviagin
А нечего подробнее

я подробнее приводил ссылку на годболт. да, это copy elision

Stas
я подробнее приводил ссылку на годболт. да, это co...

концептуально это он, но по стандарту copy elision как термин это примерно return value optimization, и приведенный пример под это не очень подходит https://t.me/supapro/1016714

Vlad
концептуально это он, но по стандарту copy elision...

Можно это ещё показать без -fno-copy-elision: если удалить copy/move конструкторы, то T t = T(); перестанет компилироваться

Stas
Можно это ещё показать без -fno-copy-elision: если...

в эту опцию компилятора вложен такой смысл, какой захотели разработчики компилятора. оно не обязано коррелировать со значением copy elision, которым пользуется стандарт

Stas
Если отключить copy-ellision, то там будет вызов м...

На с++17 и с этим флагом не будет никаких мувов

Stas
а на с++14 будет

У некоторых копиляторов будет. У icc и на С++11 нет никакого мува

我が名はレギオン
На с++17 и с этим флагом не будет никаких мувов

и оно так не потому, что эта форма записи поменяла сущность, а потому что появился guaranteed copy elision и move конструктор уже не нужен из-за этого

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта