如何修复隐式转换的C ++警告?

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”)

有谁知道我可以添加什么,或者我错过了此声明以解决此问题?

Lig*_*ica 5

该警告是由-Wsign-conversionswitch 触发的,它检测到您正在使用带符号变量并将其转换为无符号变量,方式可能会更改该值。

对于肯定的文字,它不会这样做,因为转换显然不会改变值,因为那将毫无意义,而且很烦人。您会得到像的否定文字-5

(从技术上讲,这是5应用一元求反运算符的文字,而不是“负文字”!)。

对于命名变量,它无法真正预测出该值是多少,因此请谨慎行事。

您应该使变量start具有type size_t


eer*_*ika 5

您可以:

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。