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

Это будет валидно? Foo value = 50; Bar value = 60;

26 ответов

19 просмотров

То есть void foo(Foo); foo(50) - это хороший код? :)

Pavel-Zhigulin Автор вопроса
Alexander Karaev
То есть void foo(Foo); foo(50) - это хороший код? ...

Вопрос не в хорошести. Вопрос в валидности. Насколько мне помнится, присваивать enum-у значение, которое в нём не определено - это UB.

Pavel Zhigulin
Вопрос не в хорошести. Вопрос в валидности. Наскол...

Всё будет валидно, если поправить на Foo value = Foo{50} (см. std::byte)

Я так понял, что ты хочешь, чтобы это было бы НЕВАЛИДНО, нет?

Pavel-Zhigulin Автор вопроса
Ilya Zviagin
Я так понял, что ты хочешь, чтобы это было бы НЕВА...

Изначальный запрос был в том, чтобы оба типа вели себя как обычный тип, но нельзя было сконвертировать один в другой: using Foo = int; using Bar = int; Foo foo = 0; Bar bar = foo; // Error: could not cast Foo to const Bar& in Bar::Bar(const Bar&)

Pavel Zhigulin
Вопрос не в хорошести. Вопрос в валидности. Наскол...

If the underlying type is not fixed and the source value is out of range, the result is unspecified (until C++17)undefined (since C++17). (The source value, as converted to the enumeration's underlying type if floating-point, is in range if it would fit in the smallest bit field large enough to hold all enumerators of the target enumeration.) Otherwise, the result is the same as the result of implicit conversion to the underlying type.

Pavel-Zhigulin Автор вопроса
Michael Chambers
If the underlying type is not fixed and the source...

Ок, спасибо, буду иметь ввиду.

Pavel Zhigulin
Изначальный запрос был в том, чтобы оба типа вели ...

А ещё можно очень быстро налепить аналогичный класс. Ну, два в смысле. Или один шаблонный и инстанциировать. Ну и ты конечно понимаешь, что ты занимаешься полной ерундой, а именно: приписываешь существующим конструкциям языка несвойственные им возможности и назначение.

Pavel-Zhigulin Автор вопроса
Ilya Zviagin
Ну, enum же

Что если я хочу вот такое: using Foo = std::string; using Bar = std::string; Foo foo = "hello"; Bar bar = foo; // Error: could not cast Foo to const Bar& in Bar::Bar(const Bar&)

Pavel Zhigulin
Что если я хочу вот такое: using Foo = std::strin...

Вот как раз выше дал тебе ответ...

Pavel-Zhigulin Автор вопроса
Ilya Zviagin
А ещё можно очень быстро налепить аналогичный клас...

Это не я :) Там выше по переписке уже привели пример библиотеки, которая решают эту задачу (плохо и некрасиво решает, но решает). В моей работе я не припомню, чтобы мне уж очень сильно нужен был strong typedef

Pavel Zhigulin
Что если я хочу вот такое: using Foo = std::strin...

Ты мультик про циплёнка смотрел, да ? "Кокое всё зелёное, коко..." и так далее. Что лиса говорила?

Pavel Zhigulin
Это не я :) Там выше по переписке уже привели прим...

Очень хочется стронг тайпдефы, но не очень понятно чего конкретно хочется. Стронг тайпдефы позволяют не складывать абсолютные пути и не делить киловатты на часы. При этом, когда начинаешь разбирать детали - сразу непонятно, скажем, можно ли сложить абсолютные пути как строки, если очень хочется

Constantine Drozdov
Очень хочется стронг тайпдефы, но не очень понятно...

Нужно дать возможность в любой момент откатиться к основному типу.

Kirill Bolshakov
Нужно дать возможность в любой момент откатиться к...

В каком смысле откатиться, например, в таком можно? std::string foo(abs_path const& a, abs_path const& b) { return static_cast<std::string const&>(a) + static_cast<std::string const&>(b); }

Constantine Drozdov
В каком смысле откатиться, например, в таком можно...

Да в любом - хоть функцию библиотечную std::to_underlying как у енумов

Kirill Bolshakov
Да в любом - хоть функцию библиотечную std::to_und...

А в таком? std::string foo(abs_path const& a, abs_path const& b) { return static_cast<std::string const&>(a) + b; }

Constantine Drozdov
А в таком? std::string foo(abs_path const& a, abs_...

Это уже зависит от того как мы сделаем наследование операторов. Я пока не могу сформулоировать как я бы хотел.

Kirill Bolshakov
Это уже зависит от того как мы сделаем наследовани...

А в таком? Ковариантен или нет? struct i_some { virtual ~some() = default; virtual std::string foo() = 0; }; struct some : i_some { abs_path foo() override; }

Constantine Drozdov
А в таком? Ковариантен или нет? struct i_some { ...

Ковариантность вообще только для указателей вроде работает, так что вряд ли

Kirill Bolshakov
Ковариантность вообще только для указателей вроде ...

Если ссылки можно кастовать, почему он не ковариантен?

Constantine Drozdov
А в таком? Ковариантен или нет? struct i_some { ...

Я знал, что ты придёшь и покажешь много замечательных примеров :)

Constantine Drozdov
Если ссылки можно кастовать, почему он не ковариан...

Ну такой код просто для наследования будет работать?

Kirill Bolshakov
Ковариантность вообще только для указателей вроде ...

И да, еще в таком вот можно? abs_path foo(std::string const& a, std::string const& b) { return static_cast<abs_path const&>(a) + static_cast<abs_path const&>(b); }

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта