vector<T>
a un constructeur qui prend la taille du vecteur, et pour autant que je sais qu'il est explicite, qui peut être prouvé par le fait que le code suivant ne peut pas compilerConversion implicite de int en vecteur?
void f(std::vector<int> v);
int main()
{
f(5);
}
Qu'est-ce que je ne peux pas comprendre et je vous demande d'expliquer est pourquoi le code suivant compile
std::vector<std::vector<int>> graph(5, 5);
Non seulement il compile, il redimensionne réellement graphique à 5 et définit chaque élément à un vecteur de cinq zéros, soit le même effet que serait le code j'écrirais normalement:
std::vector<std::vector<int>> graph(5, std::vector<int>(5));
Comment? Pourquoi?
compilateur: MSVC10.0
OK, semble que c'est un bug MSVC (encore un autre). Si quelqu'un peut élaborer sur le bogue dans une réponse (à savoir résumer les cas où il est reproduit) Je serais heureux de l'accepter
Ceci (à juste titre) ne compile pas sur GCC 4.7. Encore un autre bizutage non-standard de MSVC++. Ils ont probablement juste oublié de marquer le constructeur 'explicite', vous pouvez creuser' 'pour vérifier cela. –
syam
@syam: Je suis heureux de le chauffer, il ne compile pas sur GCC, mais ce qui est vraiment bizarre, c'est que le premier exemple compile sur MSCV, tandis que l'autre ne le fait pas. C'est vraiment étrange –
@ArmenTsirunyan Ni compile sur VS2012; le message d'erreur indique que le constructeur est 'explicite' – Praetorian