C++ C+;中字符串的下标有什么问题+;
这段代码应该打印“这里有东西”,但实际上打印错误C++ C+;中字符串的下标有什么问题+;,c++,string,subscript,C++,String,Subscript,这段代码应该打印“这里有东西”,但实际上打印错误 void test(){ string str = ""; int count = 0; if (count > str.length() - 1){ cout << "something here" << endl; return; } cout << "wrong" << endl; } void测试(){ 字符串s
void test(){
string str = "";
int count = 0;
if (count > str.length() - 1){
cout << "something here" << endl;
return;
}
cout << "wrong" << endl;
}
void测试(){
字符串str=“”;
整数计数=0;
如果(计数>长度()-1){
coutstring::length
返回一个size\u t
,它是无符号int
如果它返回0,你减去1,它会
在你的第二个案例中它起作用的原因是
int last_index = str.length() - 1;
在减法和赋值过程中,size\u t
转换为int
。string::length
返回一个size\u t
,它是无符号int
如果它返回0,你减去1,它会
在你的第二个案例中它起作用的原因是
int last_index = str.length() - 1;
在减法和赋值过程中,size\u t
转换为int
。string::length
返回一个size\u t
,它是无符号int
如果它返回0,你减去1,它会
在你的第二个案例中它起作用的原因是
int last_index = str.length() - 1;
在减法和赋值过程中,size\u t
转换为int
。string::length
返回一个size\u t
,它是无符号int
如果它返回0,你减去1,它会
在你的第二个案例中它起作用的原因是
int last_index = str.length() - 1;
size\u t
在减法和赋值过程中转换为int
。打开/打开编译器警告。打开/打开编译器警告。打开/打开编译器警告。打开/打开编译器警告。在减法后,它将以y发生的实现定义方式转换为int
ield-1
。此外,size\u t
在64位平台上不太可能是unsigned int
。有趣的是,根据优先级顺序,技术上是否规定了是否应首先执行转换?减法将两者提升为无符号整数类型,即size\u t
(根据平台的不同,这可以是无符号int
、无符号long
或无符号long
),结果将以实现定义的方式转换为int
(因为它不能在int
的范围内表示)用于初始化last_index
。在减法后,它以实现定义的方式转换为int
,恰好产生-1
。而且,size\u t
在64位平台上不太可能是无符号int
。有趣的是,基于优先顺序,它在技术上是指定的吗如果应首先执行转换?减法将两者升级为无符号整数类型,即size\u t
(根据平台的不同,可以是unsigned int
、unsigned long
或unsigned long
),结果将以实现定义的方式转换为int
(因为它不能在int
的范围内表示)用于初始化last_index
。在减法后,它以实现定义的方式转换为int
,恰好产生-1
。而且,size\u t
在64位平台上不太可能是无符号int
。有趣的是,基于优先顺序,它在技术上是指定的吗如果应首先执行转换?减法将两者升级为无符号整数类型,即size\u t
(根据平台的不同,可以是unsigned int
、unsigned long
或unsigned long
),结果将以实现定义的方式转换为int
(因为它不能在int
的范围内表示)用于初始化last_index
。在减法后,它以实现定义的方式转换为int
,恰好产生-1
。而且,size\u t
在64位平台上不太可能是无符号int
。有趣的是,基于优先顺序,它在技术上是指定的吗如果应首先执行转换?减法将两者升级为无符号整数类型,即size\u t
(根据平台的不同,可以是unsigned int
、unsigned long
或unsigned long
),结果将以实现定义的方式转换为int
(因为它不能在int
的范围内表示),并用于初始化最后的索引。