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

cout
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

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
的范围内表示),并用于初始化
最后的索引。