Сообщение 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)}. Остальное см. выше.
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)}. Остальное см. выше. Я в целом понимаю, чего ты хотел бы добиться, и немного поддерживаю. Но тут начинаются другие проблемы.
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)}. Остальное см. выше. Я в целом понимаю, чего ты хотел бы добиться, и немного поддерживаю. Но тут начинаются другие проблемы.