Как «уменьшить типизацию для создания типов C ++» с помощью Uniform Initializer? - PullRequest
3 голосов
/ 16 сентября 2011

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 16 сентября 2011

Полагаю, он имеет в виду, что

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");
1 голос
/ 23 сентября 2011

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

...