std :: vector :: operator []不测试类型

mis*_*ink 4 c++ vector type-conversion

我有这样的结构:

struct VrtxPros{
    long idx;
    std::vector<std::string> pros;
    VrtxPros(const long& _idx=-1, const std::string& val="") : idx(_idx)
    {
         if ( !val.empty() && val!="" )
             pros.push_back(val);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在代码中我使用它:

long idx = 1234;
VrtxPros vp( 2134, std::string("-1") );
if ( margin ) vp.pros[0] = idx;
Run Code Online (Sandbox Code Playgroud)

编译器没有问题.我很想知道因为运营商应该提供参考.我无法找到一个operator=std::string这将接受长达来源.

为什么代码编译?

Dav*_*vid 5

A std::string可以分配给a char,并且a long可以隐式转换为a char,因此a std::string可以分配给a long.你的编译器可能会发出关于这种隐式转换的警告(如果你还没有,你会看到警告级别,你会看到它).

请参阅此处operator=列出的#4 .请注意,没有构造函数重载只需要一个char,所以这种事情只能用于赋值.

就此而言,您也可以这样做:

std::string wow;
wow = 7ull; // implicit unsigned long long to char conversion
wow = 1.3f; // implicit float to char conversion
Run Code Online (Sandbox Code Playgroud)