четверг, 13 июля 2023 г.

[prog.c++] И вот ради этого C++ становится все сложнее и сложнее?

Простите, но у меня бомбануло. Только что узнал, что в 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 комментария:

NickViz комментирует...

как обычный "пользователь" С++ не могу не согласиться. довольно много удивлялся - почему для определенных вещей в плюсах есть много путей их написать, и при добавлении нового метода (комитетом), старые пути не депрекейтят (ну вот только-что register и auto_ptr убрали).

Вопрос - нужен ли typedef вообще? или можно везде обойтись using? Т.е. является ли typedef хм, устаревшим и везде теперь пих(c)ать using или где-то он ещё необходим (темплейтная магия)?

NickViz комментирует...

это кмк попытка добавить "ортогональности" в С++ т.е. если теперь можно объявлять переменные в if/while scope - то почему бы не объявлять там же и типы. другой вопрос, что особой нужды в таком суперлокальном объявлении нет, и в приведенных примерах тип должен, на мой взгляд, быть объявлен до контейнера, который этот тип хранит.

eao197 комментирует...

@NickViz:

> Вопрос - нужен ли typedef вообще?

Я после перехода на C++11 пользуюсь только using-ом, надобности в typedef пока ни разу не возникло.

ИМХО, typedef остается ради совместимости, потому что в кодовых базах с бородатой историей никто не будет typedef на using менять.