我有这样的结构:
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);
}
};
以后在代码中我使用它:
long idx = 1234;
VrtxPros vp( 2134, std::string("-1") );
if ( margin ) vp.pros[0] = idx;
编译器没有问题。我很想知道因为运营商应该提供参考。
operator=
std::string
{{1}} {{1}},我会接受长作为来源。
为什么代码会编译?
答案 0 :(得分:5)
可以将std::string
分配给char
,long
可以隐式转换为char
,因此可以将std::string
分配给long
一个operator=
。你的编译器可能会发出关于这种隐式转换的警告(如果你还没有,你会看到警告级别,你会看到它)。
请参阅列出的{4} std::string wow;
wow = 7ull; // implicit unsigned long long to char conversion
wow = 1.3f; // implicit float to char conversion
here。注意没有constructor overload只接受一个char,所以这种事情只能用于赋值。
就此而言,您也可以这样做:
{{1}}
答案 1 :(得分:1)
使用-Wconversion for g ++获取从long到char的隐式转换的警告。