@ProCxx

Страница 2066 из 2477
Роман
19.05.2018
17:35:53
Товарищи, а что комитет думает по поводу нечленовых operator += например?

И нечленовых operator=

Alexander
19.05.2018
17:37:45
извини, каких?

это что за звери такие?

Google
Роман
19.05.2018
17:38:48
ну non-member перегрузки операторов

например, чтобы можно было делать так: string& operator=(string &, const MyClass &); string str; str = MyClass();

Sergey
19.05.2018
17:40:05
это что за звери такие?
он например про переопределение operator<< для cout (который можно объявить только в виде свободной функции)

Aidar
19.05.2018
18:02:03
юзкейс?
+ выстрел в ногу?

Роман
19.05.2018
18:04:09
юзкейс?
Вот есть класс стандартной библиотеки, например, строка. Есть свой класс, который можно представить в виде строки. Почему бы не разрешить сделать внешний оператор, который бы позволил простым и понятным синтаксисом сделать то, что нужно?

Чтобы стреляли исключительно в свою ногу, сделать правило. что это работает только в неймспейсе, где оператор объявлен, как в Rust. А когда это в C++ оберегали от прострела своей ноги?

Роман
19.05.2018
18:05:41
так это разве не разрешено?
Ну operator= нет. operator+= тоже

Sergey
19.05.2018
18:05:45
operator<< для всяких потоков точно разрешён

Роман
19.05.2018
18:06:10
operator<< для всяких потоков точно разрешён
Так вот и я о том, что-то дали, что-то - нет. В чём причина диссонанса?

Google
Роман
19.05.2018
18:08:27
Там же временная строка создаётся. А если есть возможность не делать временной строки?

Scarf
19.05.2018
18:09:50
Чтобы стреляли исключительно в свою ногу, сделать правило. что это работает только в неймспейсе, где оператор объявлен, как в Rust. А когда это в C++ оберегали от прострела своей ноги?
Это потому, что эти операторы подразумевают то, что ты знаешь кишки класса. Для операторов << >> это не обязательно в контексте ввода-вывода в поток.

Роман
19.05.2018
18:10:29
Строка это просто самый понятный пример, оно более пригодно, если у нас будет какой-нибудь std::variant, и не хочется плодить к нему ещё один вариант, проще свести к имеющемуся.

Scarf
19.05.2018
18:12:50
Но ведь кишки класса, в принципе, и так скрыты, в чём проблема разрешить операторы то?
Эм, а как ты собираешься реализовать, например, operator=, не зная реализации класса?

Роман
19.05.2018
18:13:57
Эм, а как ты собираешься реализовать, например, operator=, не зная реализации класса?
А почему нет? Если у нас есть способ преобразования, который мы можем реализовать функцией или оператором каста - эту же логику и в operator= вписать. Это позволит избежать временных объектов. А они бывают массивными.

Ulan
19.05.2018
18:15:19
Здравствуйте

Aidar
19.05.2018
18:15:40
Ulan
19.05.2018
18:15:58
Можете подсказать

Роман
19.05.2018
18:16:15
Нет возможности, у тебя нет доступа к кишкам стд стринг
А зачем они мне, если мне нужно сделать clear(); reserve(); append() ?

Ulan
19.05.2018
18:16:39
Почему если я написал алгоритм в dev cpp ide и все корректно работает

Ulan
19.05.2018
18:17:01
Если пишу алгоритм в visual c++

То не работает?

Aidar
19.05.2018
18:17:23
Scarf
19.05.2018
18:17:25
Ulan
19.05.2018
18:17:27
Не компилируется

Sergey
19.05.2018
18:17:48
Не компилируется
какой компилятор использовался в dev cpp?

Роман
19.05.2018
18:17:54
Лол тогда это вывод в поток
Товарищ, я же пример привожу, там может быть не строка, а сложный variant

Google
Ulan
19.05.2018
18:18:01
Console application

Aidar
19.05.2018
18:18:14
Sergey
19.05.2018
18:18:16
Console application
это тип конечного приложения, а не компилятор

Aidar
19.05.2018
18:18:24
А не += к строке

Ulan
19.05.2018
18:18:25
Ммм

Я начинающий программист

Компилятор дев с++

Aidar
19.05.2018
18:19:07
Ulan
19.05.2018
18:19:15
Спс

Роман
19.05.2018
18:19:34
А не += к строке
Да я же не принципиально об этом примере. Я вообще о концепции. Для других типов это может быть не семантически вывод в поток если у меня std::variant<Type1, Type2>, а я хочу туда зафигачить Type3, котрый может быть оптимально приведён к Type1 без временного объекта

Роман
19.05.2018
18:21:52
Ключевое слово приведен
тут и оно, оператор каста порождает временный объект=)

Admin
ERROR: S client not available

Aidar
19.05.2018
18:24:13
Я примерно понял что вы хотите

Вам короче лень оборачивать в свой класс

Роман
19.05.2018
18:24:37
Вам короче лень оборачивать в свой класс
Так точно. Особенно, если это ради полторы строчки кода.

Aidar
19.05.2018
18:25:17
Ну потенциально это может развиться в больше чем полторы

Роман
19.05.2018
18:25:38
Это всегда баланс и рефакторинг, так и работаем. Невозможно же всё запланировать.

Google
Aidar
19.05.2018
18:25:53
А можно было сразу написать нормально

Обернуть вариант в класс

Роман
19.05.2018
18:26:44
Обернуть вариант в класс
Ключевой момент изначально в том, что код с variant может быть не мой. да и вообще это пложение лишних сущностей в проекте.

Я понимаю, почему раньше эти операторы не сделали свободными, но сейчас то язык немного другой. Раст вот, например, имеет такие возможности.

Aidar
19.05.2018
18:28:11
Но присваивание перегружать вне класса это дичь

Я бы сказал противопоказано

Роман
19.05.2018
18:32:15
Так я и предлагаю разрешить их, но не доаавлять к ADL. Только свой неймспейс.

Aidar
19.05.2018
18:32:40
не надо так

какието эвристики для частных случаев

Роман
19.05.2018
18:33:01
А сейчас для них не иф чтоль?

Aidar
19.05.2018
18:33:11
нет

я конечно понимаю что раст построен на эвристиках

Роман
19.05.2018
18:33:44
То есть, это всё должно работать на весь массив присваиваний, новых ифов это не создаст

Dead
19.05.2018
18:34:04
Кто то писал алгоритм ,обойти конем шахматную доску ?

Aidar
19.05.2018
18:34:13
вангую что это выльется в квалификатор недобавлятькadl аkа explicit на все функции

Роман
19.05.2018
18:37:04
Кстати, было же какое-то предложение к стандарту, которое позволяло вызывать size(const T &t) как t.size(), или я путаю?

Страница 2066 из 2477