我刚刚开始使用C ++。
我正在尝试获取字符串'str'的前三个字符,并将其与已知字符串(例如'knownString')进行比较。
为此,我编写了以下代码行:
if(str.substr(start,3)== knownString)
其中'start'是我之前声明的整数。 但是我一直收到以下警告消息:
警告:隐式转换将签名:“ int”更改为 'std :: __ cxx11 :: basic_string,** ** std :: allocator> :: size_type'(又名“ unsigned int”)
有人知道我可以添加什么,或者我在此声明中错过了解决此问题的方法吗?
答案 0 :(得分:4)
This warning is triggered by the -Wsign-conversion
switch,检测到您正在使用带符号变量并将其转换为无符号变量,其方式可能会更改该值。
对于肯定的字面值而言,它不是这样做的,因为转换显然不会改变值,因为那将是毫无意义的,而且确实很烦人。您将获得像-5
这样的否定文字。
(从技术上讲,这是应用了一元求反运算符的文字5
,而不是“负文字”!)。
对于命名变量,它无法真正预测出该值是什么,因此谨慎行事。
您应该使变量start
的类型为size_t
。
答案 1 :(得分:4)
您可以:
要么1.明确显示转换:
{
"CountryRecord":
{
"Country_Name": "AP"
},
"UserRecord":
{
"Name": "Test User",
"userName": "Test.User@mail.com",
"userRole": "Hr"
}
}
或者2.首先不要进行转化:
str.substr(static_cast<std::string::size_type>(start), 3)
或3.要求编译器不要警告它:
std::string::size_type start;
我建议选择2。