我最近一直在学习C ++,并且已经意识到C ++中的字符串文字必须是常量,而在C中则不是。这是一个例子。以下代码在C中有效,但在C ++中无效:
char* str = "Hello World";
有人可以解释为什么吗?
C最初没有const
关键字,因此,如果在引入关键字后它们更改了文字以要求const
限定,则会破坏旧代码。但是,C的字符串文字是不可变的,因此即使内容不是const
限定的,更改内容也是未定义的行为。
C ++,另一方面,是使用const
关键字设计的。不受遗留代码有效的限制,他们能够适当地限定其字符串文字。
使用字符串文字常量可使编译器更好地优化代码。
例如,如果可以对其进行优化,则立即数甚至可能没有内存地址(例如,对立即数的唯一引用是在编译时可用于产生另一个值的上下文中) 。
此外,不同的文字可以占据相同或重叠的空间。最后,字符串文字可能位于只读存储器中。