2017-10-18 4 views

Répondre

9

std::vector n'a rien à voir avec cela, votre échantillon avec std::vector est similaire à

std::string s; 
s = 42; 

mais

std::string s = 42; // Constructor: "equivalent" to std::string s = std::string(42) 

est différent de celui

std::string s; 
s = 42; // assignation: s.operator =(42) 

et std::string::operator=(char) existe alors que la prise de constructeur char n'a pas.

+1

et un int est implicitement castées char – Steve

+3

terminologie correcte serait @ Steve est « implicitement convertible », moulages sont toujours explicites. –

6

std::vector est un hareng rouge. Si vous essayez simplement ce qui suit, il compilera aussi bien:

#include <string> 
int main() 
{ 
    std::string str; 
    str = 42; 
} 

Ce que vous faites réellement utilise std::string::operator=(char) qui attribue un caractère unique à la chaîne. 42 est implicitement convertible en char. Selon la table ascii, la valeur 42 est représentée par le caractère '*'. On peut vérifier ce qui suit:

#include <iostream> 
#include <string> 
int main() 
{ 
    std::string str; 
    str = 42; 
    std::cout << str; // Prints * 
}