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

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

26 ответов

17 просмотров

То есть 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); }

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта