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

Сообщение Re[10]: Carbon от 14.04.2024 5:39

Изменено 14.04.2024 5:53 netch80

Re[10]: Carbon
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, netch80, Вы писали:


N>>Так а как его запретить-то, если оно нужно?

FLY>А где может пригодиться запись имени параметра внутри скобок int a(int(b))?

Это синтаксис конструктора. Объявление такого типа создаёт переменную-объект, задавая аргументы конструктора.

FLY> Ну или вот такое приведение типа как в первом примере? На мой взгляд int i = (int)d;


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

Они просто разные. Отождествлять их нельзя.

То, о чём ты говоришь, могло бы быть альтернативно записано, конечно, кучей методов, например, Moo m1 = @construct(arg1, arg2);, где @construct — какой-то синтаксический элемент специально для этого. Но так не сделали, а вместо этого в C++11 ввели синтаксис с {} для разрешения неоднозначностей (ну и начав современные догонялки до 19 разных видов инициализации).

FLY> и читается куда лучше чем int i(int(d)); и парсится проще.


C++11 сделал тут возможным, и часто желательным, int i{int(d)}. Остальное см. выше.
Re[10]: Carbon
Здравствуйте, rFLY, Вы писали:

FLY>Здравствуйте, netch80, Вы писали:


N>>Так а как его запретить-то, если оно нужно?

FLY>А где может пригодиться запись имени параметра внутри скобок int a(int(b))?

Это синтаксис конструктора. Объявление такого типа создаёт переменную-объект, задавая аргументы конструктора.

FLY> Ну или вот такое приведение типа как в первом примере? На мой взгляд int i = (int)d;


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

Они просто разные. Отождествлять их нельзя.

Как ты бы предполагал такое записать в случае нескольких параметров? Moo m1 = (arg1, arg2);, что ли? Так оно ещё больше собьёт с толку.

То, о чём ты говоришь, могло бы быть альтернативно записано, конечно, кучей методов, например, Moo m1 = @construct(arg1, arg2);, где @construct — какой-то синтаксический элемент специально для этого. Но так не сделали, а вместо этого в C++11 ввели синтаксис с {} для разрешения неоднозначностей (ну и начав современные догонялки до 19 разных видов инициализации).

FLY> и читается куда лучше чем int i(int(d)); и парсится проще.


C++11 сделал тут возможным, и часто желательным, int i{int(d)}. Остальное см. выше. Я в целом понимаю, чего ты хотел бы добиться, и немного поддерживаю. Но тут начинаются другие проблемы.