为什么C ++中的字符串文字(char *)必须为常量?

问题描述 投票:5回答:2

我最近一直在学习C ++,并且已经意识到C ++中的字符串文字必须是常量,而在C中则不是。这是一个例子。以下代码在C中有效,但在C ++中无效:

char* str = "Hello World";

有人可以解释为什么吗?

c++ c pointers string-literals
2个回答
7
投票

C最初没有const关键字,因此,如果在引入关键字后它们更改了文字以要求const限定,则会破坏旧代码。但是,C的字符串文字是不可变的,因此即使内容不是const限定的,更改内容也是未定义的行为。

C ++,另一方面,是使用const关键字设计的。不受遗留代码有效的限制,他们能够适当地限定其字符串文字。


0
投票

使用字符串文字常量可使编译器更好地优化代码。

例如,如果可以对其进行优化,则立即数甚至可能没有内存地址(例如,对立即数的唯一引用是在编译时可用于产生另一个值的上下文中) 。

此外,不同的文字可以占据相同或重叠的空间。最后,字符串文字可能位于只读存储器中。

© www.soinside.com 2019 - 2024. All rights reserved.