我是编程的新手.我正在学习vector
C++.我很好奇为什么string s = 42;
会导致错误但是
vector<string>vec(3);
vec[0] = 42;
Run Code Online (Sandbox Code Playgroud)
才不是.谢谢!
std::vector
与此无关,你的样本与之std::vector
相似
std::string s;
s = 42;
Run Code Online (Sandbox Code Playgroud)
但
std::string s = 42; // Constructor: "equivalent" to std::string s = std::string(42)
Run Code Online (Sandbox Code Playgroud)
不同于
std::string s;
s = 42; // assignation: s.operator =(42)
Run Code Online (Sandbox Code Playgroud)
并且std::string::operator=(char)
存在而构造函数char
不存在.
std::vector
是一只红鲱鱼.如果你只是尝试以下,它也将编译正常:
#include <string>
int main()
{
std::string str;
str = 42;
}
Run Code Online (Sandbox Code Playgroud)
你实际在做的是使用std::string::operator=(char)
哪个为字符串分配一个字符.42
可以隐式转换为char
.根据ascii表,值42由'*'
字符表示.我们可以通过以下方式验证这一点:
#include <iostream>
#include <string>
int main()
{
std::string str;
str = 42;
std::cout << str; // Prints *
}
Run Code Online (Sandbox Code Playgroud)