我尝试了以下程序:
#include <iostream>
#include <string>
int main ()
{
std::string str;
str[0] = 'o';
str[1] = 'k';
std::cout << str.length();
std::cout << "as a whole :";
std::cout << str << std::endl;
std::cout << "character by character :";
std::cout << str[0] << str[1] << std::endl;
return 0;
}
我不明白为什么不能使用object变量将字符串整体打印出来,为什么返回长度,0
因为很明显我已经使用下标运算符添加了字符,因为这将返回char引用,所以我知道这是合法的。
另外,我没有得到任何例外。就是这样。显然,std::string
班上的幕后发生了很多事情,我知道我错过了一些东西。有人可以帮我吗?
您有一个字符串长度0
,然后尝试使用下标运算符修改其内容。这是未定义的行为,因此在这一点上,无法保证任何特定的结果。如果at()
改用它,它将暴露出错误并引发异常。
为什么长度返回为0
它始于0
,您没有做任何添加(例如push_back
或+=
)。但是话又说回来,由于您之前所做的是未定义的行为,因此此处可能会发生任何事情。
另外,我没有任何例外。
您可以std::string::at
改为std::out_of_range
尝试,尝试时会抛出异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句