2017-10-18 107 views

回答

9

std::vector已经无关,与std::vector你的样品是类似

std::string s; 
s = 42; 

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

不同于

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

std::string::operator=(char)存在而构造回吐char没有。

+1

和一个int隐式强制转换为一个char – Steve

+3

@Steve正确的术语是“隐式转换”,强制转换总是明确的。 –

6

std::vector是一个红色的鲱鱼。如果你只是尝试以下方法,它也将编译罚款:

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

,你实际上是做什么用std::string::operator=(char)其指定一个字符的字符串。 42可以隐式转换为char。根据ascii表格,值42由'*'字符表示。我们可以用下面的验证这一点:

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