gpt4 book ai didi

c++ - 可修改字符串文字的用例

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:32 27 4
gpt4 key购买 nike

多年来,这已被弃用:

char *p = "abc";

然后在 C++11 中成为非法。然而,许多人并不知道这是合法的:

char *p = (char*)"abc";

关键是:

[C++11, diff.lex] Programs that have a legitimate reason to treat string literals as pointers to potentially modifiable memory are probably rare.

有正当理由吗?请将您的答案集中在托管环境上。

最佳答案

基本原理是您可能拥有一个大型遗留代码库,其中 char * 被传递,即使对于仅用于读取的参数也是如此。强制转换为 const char * 可能会引发巨大的代码更改而没有任何实际好处(在某些情况下,它甚至会强制代码重复)。

请注意,将 (char *) 转换为 (const char *) 的能力并不是一个特殊规则(您始终可以放弃指针和引用的常量性如果在指向/引用的对象被声明为常量时没有实际写操作发生,则代码是合法的。

还要注意 const char * 并不意味着指向的 char 是常量(即它不能被写入),只是你不能进行写操作 使用那个指针...如果指向的对象不是常量并且有其他方法可以到达它(例如别名),则指向的对象实际上可以改变。

指针和引用的常量性是指针/引用的属性,而不是被引用对象的属性。可能“const pointer”对他们来说确实是个坏名字,“read-only pointer”会更合适。

关于c++ - 可修改字符串文字的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33117145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com