Простите, но у меня бомбануло. Только что узнал, что в C++20 стало можно писать вот так:
std::vector pointsScored {27, 41, 32, 23, 28};
for (typedef int Points; Points points : pointsScored) {
std::cout << "Jokic scored " << points << '\n';
}
А в C++23 исправили просчет, допущенный в C++20: разрешили кроме typedef-а в подобных конструкциях применять using:
std::vector pointsScored {27, 41, 32, 23, 28};
for (using Points = int; Points points : pointsScored) {
std::cout << "Jokic scored " << points << '\n';
}
Хвала всевышнему, уж теперь-то заживем! (Это горький сарказм, если что)
Да уж. Написать по старинке, т.е.:
std::vector pointsScored {27, 41, 32, 23, 28};
{
using Points = int;
for (Points points : pointsScored) {
std::cout << "Jokic scored " << points << '\n';
}
}
было не судьба, нужно было язык усложнять еще больше.
Верной дорогой, блин... :(
3 комментария:
как обычный "пользователь" С++ не могу не согласиться. довольно много удивлялся - почему для определенных вещей в плюсах есть много путей их написать, и при добавлении нового метода (комитетом), старые пути не депрекейтят (ну вот только-что register и auto_ptr убрали).
Вопрос - нужен ли typedef вообще? или можно везде обойтись using? Т.е. является ли typedef хм, устаревшим и везде теперь пих(c)ать using или где-то он ещё необходим (темплейтная магия)?
это кмк попытка добавить "ортогональности" в С++ т.е. если теперь можно объявлять переменные в if/while scope - то почему бы не объявлять там же и типы. другой вопрос, что особой нужды в таком суперлокальном объявлении нет, и в приведенных примерах тип должен, на мой взгляд, быть объявлен до контейнера, который этот тип хранит.
@NickViz:
> Вопрос - нужен ли typedef вообще?
Я после перехода на C++11 пользуюсь только using-ом, надобности в typedef пока ни разу не возникло.
ИМХО, typedef остается ради совместимости, потому что в кодовых базах с бородатой историей никто не будет typedef на using менять.
Отправить комментарий