Единая инициализация C ++ 0x «странность»

Как и многие, я очень взволнован C ++ 0x . Я стараюсь изучать и использовать новые функции в новых проектах, чтобы я мог написать лучший и самый простой в обслуживании код.

Излишне говорить, что мне нравится идея, лежащая в основе новых инициализаторов. Итак, я смотрю на них, и это имеет для меня смысл:

T x = { 1, 2, 3 }; // like a struct or native array
T x({1, 2, 3});    // copy construct something like an "object literal" in other languages... cool!
return {1, 2, 3};  // similar to above, but returning it, even cooler!

Что для меня не имеет смысла, так это:

T x{1, 2, 3};

Это просто кажется ... странным. Я не уверен, какой синтаксис люди хотят использовать, это имитирует, это просто не кажется «правильным».

Каков дизайн / мысль, стоящая за этим синтаксисом?

Единственный пример, где это кажется таким имеет значение примерно следующее:

std::vector the_vec{4};

который будет вызывать конструктор списка инициализаторов, но почему бы тогда просто не написать это:

std::vector the_vec = {4};

И сделать то, что всем уже удобно?

17
задан Evan Teran 16 December 2013 в 16:35
поделиться