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这将接受长达来源.
为什么代码编译?
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)