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