Как "уменьшить типизацию для создания типов C++" с помощью Uniform Initializer?

Я много играл в новую униформу инициализации с {}, Как это:

vector<int> x = {1,2,3,4};
map<int,string> getMap() {
    return { {1,"hello"}, {2,"you"} };
}

Бесспорно, что эта инициализация может измениться программирует C++. Но мне интересно, упустил ли я некоторые из волшебных возможностей при чтении вопроса Альфонса в часто задаваемых вопросах Херба Саттера.

Alfonse: равномерная инициализация (использование {} для вызова конструкторов, когда может быть выведен конструируемый тип) может радикально уменьшить количество типов, необходимых для создания типов C++. Такие вещи, как лямбда-выражения, изменят то, как люди пишут код на C++. [...]

Может ли кто-нибудь дать мне пример того, что именно здесь представляет Альфонс?

2 ответа

Решение

Я предполагаю, что он имеет в виду, что

std::vector<int> x{1, 2, 3, 4};
std::map<int, std::string> y{{1, "hello"}, {2, "you"}};

значительно меньше печатать, чем

std::vector<int> x;
x.push_back(1);
x.push_back(2);
x.push_back(3);
x.push_back(4);
std::map<int, std::string> y;
y.emplace(1, "hello");
y.emplace(2, "you");

Почему вы сбрасываете со счетов возможность, что это была простая ошибка? То есть он написал "создать типы C++", когда имел в виду "создать объект C++". Кажется странным, что нельзя сразу подумать: "О, он имел в виду" объект ", но написал не то".

Другие вопросы по тегам