我是编程的新手.我正在学习vectorC++.我很好奇为什么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)