Por que 'std :: vector <int> b {2};' criar um vetor de 1 elemento e não um de 2 elementos?
Eu brinco com o C ++ 11 nos últimos dias e criei algo estranho.
Se quiser inicializar uniformemente um int:
int a{5};
Mas se eu fizer a mesma coisa com um std :: vector:
std::vector<int> b{2};
Não constrói uma matriz de dois elementos, mas uma matriz com um elemento de valor dois. Parece que, para conseguir esse efeito, seria preciso ser mais explícito:
std::vector<int> c{{2}};
std::vector<int> d = {2};
Mas não como a declaração de b - isso parece inconsistente. Eu já vi outras coisas com o mesmo efeito. O que estou perguntando - esse comportamento está no padrão final do C ++ 11 ou apenas em um rascunho que foi implementado anteriormente? Em caso afirmativo, por que o comitê de padrões incluiu esse comportamento? Parece que isso derrota todo o propósito da inicialização uniforme, pois é preciso lembrar quais classes têm construtores de lista de inicializadores e usar a sintaxe old () em vez de {} apenas com essas classes. Ou alguém renuncia completamente à inicialização uniform
Isto parece um grande problema. Mas pode haver vantagens que eu não conheço.
Edit: este código:
#include <iostream>
#include <vector>
int main() {
std::vector<int> a{2};
for (auto x: a) {
std::cout << x << std::endl;
}
return 0;
}
saídas "2" no gcc 4.6.2