Sum*_*a A 2 c++ arrays pointers string-literals c++11
在 C++11 中,char指针不能直接初始化为字符串文字。
在早期版本的 C++ 中,我可以毫无问题地执行此操作。
char arr[] = "Hello";
char *p_str1 = arr; //allowed
Run Code Online (Sandbox Code Playgroud)
char *p_str3 = "Hello"; //Not allowed
Run Code Online (Sandbox Code Playgroud)
注意:我知道添加const可以修复。但我需要知道原因。
char arr[] = "Hello""Hello"在 char 数组中存储字符串文字的可修改副本arr,该p_str1变量是指向该数组的指针,因为数据是可修改的,因此指针不需要是可修改的const。
char *p_str3 = "Hello"是直接指向只读字符串文字的指针。指针不拥有字符串文字,它们通常存储在内存的某个只读部分中,无论哪种方式,您都可以访问数据,但无法修改它。强制使用const指针可以避免运行时出现不需要的问题。
C++ 标准不允许使用非常量指针来指向不可修改的数据。这是幸运的,因为它通过尝试修改它来避免未定义的行为,就像在不存在此规则的 C 中经常发生的那样。
在 C++03 中使用非常量char指针仍然是合法的(可能是出于遗留原因),但在 C++11 之后它已被弃用,并且被禁止。据我所知,尝试修改这些字符串文字始终是未定义的行为。
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |