existem planos no padrão C ++ para tratar da inconsistência dos construtores da lista de inicializadores?
construtores de lista de inicializadores em C ++ geralmente causam problemas; por exemplo
using std::vector;
using std::string;
vector<string> v{3}; // vector of three empty strings
vector<int> u{3}; // vector of one element with value 3
(Só para esclarecer, quero dizer<int>
construtor é um construtor de lista inicializador, enquanto o<string>
um énão.)
oint
case corresponde ao construtor da lista de inicializadores, enquanto ostring
caso não. Isso é feio e muitas vezes causa problemas. Também foi observado em um capítulo anterior (item 7) no Effective Modern C ++ de Scott Meyers, e ele o descreve como uma parte um tanto desagradável do padrão, que sempre que um construtor de lista de inicializadores está disponível, os compiladores pulam nos bastidores para tentar combine-o, dando prioridade a todos os outros construtores.
Obviamente, o caso int pode ser facilmente corrigido alterando-seu{3}
parau(3)
, Mas esse não é o ponto.
Esse comportamento é desejável? Houve alguma discussão ou plano do comitê padrão de C ++ para corrigir esse tipo de ambiguidade / desagradabilidade? Um exemplo seria exigir que os construtores da lista de inicializadores fossem chamados assim:vector<int> u({3})
, que já é legal no momento.