Tin*_*ina 3 c++ qt-creator implicit-conversion
我刚刚开始使用C ++。
我正在尝试获取字符串“ str”的前三个字符,并将其与已知字符串(例如“ knownString”)进行比较。
为此,我编写了以下代码行:
如果(str.substr(start,3)== knownString)
其中“ start”是我之前声明的整数。但是我一直收到以下警告消息:
警告:隐式转换将签名:“ int”更改为 “ std :: __ cxx11 :: basic_string,** ** std :: allocator> :: size_type”(又名“ unsigned int”)
有谁知道我可以添加什么,或者我错过了此声明以解决此问题?
该警告是由-Wsign-conversionswitch 触发的,它检测到您正在使用带符号变量并将其转换为无符号变量,方式可能会更改该值。
对于肯定的文字,它不会这样做,因为转换显然不会改变值,因为那将毫无意义,而且很烦人。您会得到像的否定文字-5。
(从技术上讲,这是5应用一元求反运算符的文字,而不是“负文字”!)。
对于命名变量,它无法真正预测出该值是多少,因此请谨慎行事。
您应该使变量start具有type size_t。
您可以:
1.使转换明确:
str.substr(static_cast<std::string::size_type>(start), 3)
Run Code Online (Sandbox Code Playgroud)
或2.首先不要进行转化:
std::string::size_type start;
Run Code Online (Sandbox Code Playgroud)
或者3.要求编译器不要警告它:
g++ compilation arguments -Wno-sign-conversion
Run Code Online (Sandbox Code Playgroud)
我建议选择2。