0

我想知道为什么即使sting是char数组类型,std::string::c_str()也会返回constchar*type。

字符串s(“你好”);

有一个字符串。它由字符型数组和

s[1]=“a”;

我还可以如上所述更改元素。然而,如果我调用c_str()来知道字符串对象中字符串的起始地址,它将返回constchar*type。

因此,我必须使用strcpy()将其转换为char-type数组。

为什么它返回常量类型?

2
  • 2
    这就是封装的一般工作方式。它管理自己的内存,不允许您直接修改它。只有通过它提供给你的公共成员功能。
    – 超级的
    评论 2021年4月15日6:12
  • 谢谢你的友好回答。祝您有个美好的一天。
    – 阳阳
    评论 2021年4月16日2:40

1答案1

重置为默认值
2

使某些原语不可变有助于提高效率。如果编译器知道不允许更改值,它可以以不可能用于可变值的方式进行优化。

类似地,使用K&R首次构建C时不存在的新CPU内存保护功能,可以防止常量值发生缓冲区溢出。

这些是拥有不可变String原语的一些参数。

另请参见:https://stackoverflow.com/a/28442823/1168588

1
  • 谢谢您!多亏了你,我的好奇心得到了解决。
    – 阳阳
    评论 2021年4月16日2:39

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.