<分区>
我想知道以下定义之间的区别是什么:
// file.cpp:
namespace n
{
static char const * const str1 = "hello";
static char const str2[] = "hello";
}
我想要的行为,我认为它们都提供:
- 它们都引用不可变数据(因为数据是 char consts)
- 两个变量都不能修改(因为 str1 被定义为 * const 并且因为 str2 是一个数组,不能用作左值?)
- 它们都有内部链接(通过静态)
- 它们都有命名空间范围
- 如果指向任一字符串数据的指针可用于不同的模块(通过此处未指定的某些函数),则这些字符串的内存将有效(str1 因为它指向字符串文字,而 str2 因为数组是在命名空间范围内声明)
是否有语言保证的差异? 如果存在依赖于实现的行为,我如何调查不同平台上的差异?
(对于这个例子,我没有兴趣将这些行为与 std::string 选项进行对比,但如果您认为其他读者会感兴趣,也可以随意谈论它。)