C++ C++;字符串和数组

C++ C++;字符串和数组,c++,arrays,string,C++,Arrays,String,若字符串只是一个字符数组,那个么直接访问字符串的索引会被认为是错误的编码吗?例如 string test = "Hello"; cout << text.[0]; int lenOfTest = (int)test.length(); for(int i = 0; i < lenOfTest; i++ ){ cout << test[i]; } string test=“Hello”; coutAstd::string不是char的简单数组,尽

若字符串只是一个字符数组,那个么直接访问字符串的索引会被认为是错误的编码吗?例如

 string test = "Hello"; 
 cout << text.[0];

 int lenOfTest = (int)test.length();
 for(int i = 0; i < lenOfTest; i++ ){
   cout << test[i];
 }
string test=“Hello”;

coutA
std::string
不是
char
的简单数组,尽管它是
char
的容器,是的,您可以正常访问它的每个元素。只是不要像在第二行中那样使用打开的
[
之前的点。

A
std::string
不是
char
的简单数组,尽管它是
char
的容器,是的,您可以正常访问它的每个元素。只是不要使用打开的
[
就像您在第二行中所做的那样。

我认为使用操作符[]访问char元素不是一种坏的做法,但是请记住,在使用无效位置的情况下,访问这样的字符不会引发异常。要引发异常,请使用
字符串::at

我认为使用运算符[]访问char元素不是一种坏做法,但是请记住,如果使用无效位置,访问这样的字符不会引发异常。要引发异常,请使用
字符串::at

这很好,除了
文本。[0]
,我想这是某种类型的键入。
std::string
不仅仅是一个字符数组。它是一个标准类,它重载
[]
来访问字符串的元素。这很好,除了
文本。[0]
,我想这是某种类型的输入法。
std::string
不仅仅是一个字符数组,它是一个标准类,重载
[]
访问字符串的元素。
std::string
确实包装了一个
char
数组,您可以完全访问该数组。@MattMcNabb,人们实际上希望您不能完全访问底层缓冲区。例如,如果您查看libc++,有两个缓冲区,其中只有一个实际用于给定的缓冲区n实例-我希望用户不要完全和直接地弄脏它。你可以通过
&s[0]
获得它。说清楚一点,我想我应该说“完全访问的内容”;你不能重新分配它。你也不应该写入
&s[0]
指向的内存(或者
c_str()
data()
)因为它是UB。
std::string
确实包含了一个
char
数组,您可以完全访问它。@MattMcNabb,人们实际上希望您没有对底层缓冲区的完全访问权。例如,如果您查看libc++,有两个缓冲区,其中只有一个实际用于给定实例-我希望我们ER既不能完全直接地使用,也不能完全直接地使用。你可以通过
&s[0]
获得它。为了清楚起见,我应该说“完全访问的内容”,我想;你不能重新分配它。你也不应该写入
&s[0]
(或者
c_str()
或者
data()
)指向的内存,因为它是UB。