Информация об изменениях

Сообщение Re[3]: Аналог "discarding _" для С++ от 30.06.2025 6:27

Изменено 30.06.2025 6:35 rg45

Re[3]: Аналог "discarding _" для С++
Здравствуйте, Went, Вы писали:

W>Ничего не понял. У меня задача не получить lvalue из чего угодно, а сгенерировать временный lvalue-объект, уникальный для каждого вызова. То есть, чтобы было что-то наподобие

W>
W>foo(discard<int>())
W>

W>Но в идеале без <int> (хотя это вряд ли достижимо без граблей) и с минимальным оверхедом по синтаксису и производительности.

Да я понял, что тебе нужно. Просто идеального дискардинга, как в C# не получается. Например, приведенный тобой вариант будет требовать возможности дефолтного конструирования. Мой вариант просто позволяет сконструировать налету временный объект и передать его в функцию по lvalue ссылке. Синтаксического сахара, конечно, меньше, чем в C#. Зато получается настоящий временный объект (не на куче и не в статике), который умрет в конце полного выражения или инициализатора. Также охватываются типы, для которых отсутсвует возможность конструирования по дефолту.
Re[3]: Аналог "discarding _" для С++
Здравствуйте, Went, Вы писали:

W>Ничего не понял. У меня задача не получить lvalue из чего угодно, а сгенерировать временный lvalue-объект, уникальный для каждого вызова. То есть, чтобы было что-то наподобие

W>
W>foo(discard<int>())
W>

W>Но в идеале без <int> (хотя это вряд ли достижимо без граблей) и с минимальным оверхедом по синтаксису и производительности.

Да я понял, что тебе нужно. Просто идеального дискардинга, как в C# не получается. Например, приведенный тобой вариант будет работать только для типов с дефолтным конструктором. Мой вариант просто позволяет сконструировать налету временный объект и передать его в функцию по lvalue ссылке. Синтаксического сахара, конечно, меньше, чем в C#. Зато получается настоящий временный объект (не на куче и не в статике), который умрет в конце полного выражения или инициализатора. Также охватываются типы, для которых отсутсвует возможность конструирования по дефолту.