字符串与vector <string>元素之间的差异

lig*_*ght 4 c++ string vector

我是编程的新手.我正在学习vectorC++.我很好奇为什么string s = 42;会导致错误但是

vector<string>vec(3);
vec[0] = 42;
Run Code Online (Sandbox Code Playgroud)

才不是.谢谢!

Jar*_*d42 9

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不存在.

  • @Steve正确的术语将是"隐式可兑换的",演员表总是明确的. (3认同)

Fra*_*eux 6

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)