Aidar
int{a}
Berkus
но симпатишное!
Berkus
Aidar
Эм
Aidar
А чо не имеет?
Berkus
имеет
Александр
о_О
Александр
вот это новость
Berkus
> All data types compatible with the C language (POD types) are trivially default-constructible.
Александр
понял
Александр
спасибо
Aleksei
а разве c++ стиль это не static_cast?
Dmitry
работает тама
Berkus
Berkus
когда concepts lite примут то и в шланге заработает
Александр
Александр
или -fconcept, не помню
Ivan
Получается, парни, можно писать так:
for (int i{}; i < 5; ++i) {}
Ivan
A не
for (int i = 0; i < 5; ++i) {}
Berkus
Berkus
но писать можно
Berkus
> All data types compatible with the C language (POD types) are trivially default-constructible.
Ivan
То есть не факт, что он будет нулём инициализирован?
Berkus
A trivial default constructor is a constructor that performs no action. All data types compatible with the C language (POD types) are trivially default-constructible.
Berkus
тривиальный дефолт конструктор не выполняет НИКАКИХ действий, у всех подов тривиальный дефолт конструктор
Александр
значит int i{}; ничего не инициализирует, ужас
Александр
побежал исправлять косяки с неинициализированными переменными
Anatoly
int n{} - это value initialization, будет ноль для скаляров
Anatoly
Александр
то есть со скалярами всё ок, а вот уже
struct B { int a; }
B b{};
- не инициализируется?
Anatoly
здесь будет aggregate-initialization, что обнулит a
Roman
Потсоны девелоперы, киньте чятик по SQL или BI
Roman
С сегодняшнего дня ебать счастье прилетело
Александр
Alexander
А разве aggregate? Я когда разбирал как занулять такие структуры у меня получалось
List-initialization=>value-initialization
Anatoly
Aggregate initialization is a form of list-initialization, which initializes aggregates
Alexander
Это в 11х? Я к чему, я вот разбирал этот кейс по 11ому стандарту и на слово Aggregate не натолкнулся
Anatoly
если строго по стандарту (С++14), то там нет такой терминологии
Anatoly
8.5.1 Aggregates [dcl.init.aggr]
1 An aggregate is an array or a class (Clause 9) with no user-provided constructors (12.1), no private or
protected non-static data members (Clause 11), no base classes (Clause 10), and no virtual functions (10.3).
2 When an **aggregate** is initialized by an *initializer list*, as specified in 8.5.4, the elements of the initializer list
are taken as initializers for the members of the aggregate, in increasing subscript or member order.
Anatoly
просто взяли понятие aggregate и прилипили к нему initialization
Anatoly
ничего при этом с точки зрения стандарта не нарушая
Evgenii
A look at range-v3 code generation https://kristerw.blogspot.com/2017/06/a-look-at-range-v3-code-generation.html
Alexander
Но в целом получается что дойти до zero-initialize можно без aggregate, особенно учитывая что "elements" для {} это как бы пусто
Anatoly
дойти до zero initialization можно через initializer list
Alexander
Во, я именно про это
Anatoly
ну, я объяснил откуда эта терминология
Anatoly
раз есть агрегат, значит и есть и его инициализация
Anatoly
но это не термины стандарта
Anatoly
а так чисто разговорное
Alexander
Ага. Я чисто для себя прояснить, не ошибся ли где когда цепочку от foo a{} до зануления в стандарте искал
Alexander
Так-то все ок
Max
кто знает, почему в std::string не добавляют format, join и другие вещи, которые есть в многих языках?
Nikita
Nikita
И для любителей формата есть cstdio
Max
можете кинуть статью какую нибудь, я где-то видел раньше, но не могу найти, там было подробно описано все причины
Berkus
да, опен классы было бы огонь
Evgenii
то есть?
Berkus
для остального есть fmt
Berkus
то есть?
экстеншен классы в шарпе видел?
Berkus
void foo(this Class); // => Class.foo()
Berkus
в го примерно такая же фигня
Evgenii
👍
Constantine
почему линкер не может диагностировать нарушение odr?
Evgenii
хорошо б еще useful_algorithm(a.begin(), a.end()) обернуть тогда, но это наверное сложнее
Evgenii
🎊
Nikita
А если у s уже есть метод foo?
Nikita
🐙 Antony
приблизительно на memcmp для каждой дублирующейся сущности с weak linkage
🐙 Antony
хотя возможно сильно больше... кажется что могут быть подводдные камни, когда простого memcmp недостаточно
Anatoly
а по дефолту просто боятся эту опцию включать или что?
Berkus
она может в плохих случаях линковку сломать
Berkus
а по стандарту не требуется
Anatoly
это понятно, что стандарт не требует, но сама по себе эта диагностика полезна для локализации детских болезней проекта