【发布时间】:2013-06-07 17:32:34
【问题描述】:
我想知道以下定义之间有什么区别:
// file.cpp:
namespace n
{
static char const * const str1 = "hello";
static char const str2[] = "hello";
}
我想要的行为,我认为它们都提供:
- 它们都引用不可变数据(因为数据是 char consts)
- 两个变量都不能修改(因为str1被定义为* const,又因为str2是数组,不能作为左值使用?)
- 它们都有内部链接(通过静态)
- 它们都有命名空间范围
- 如果指向任一字符串数据的指针可用于不同的模块(通过此处未指定的某些函数),则这些字符串的内存将有效(str1 因为它指向字符串文字,而 str2 因为数组是在命名空间范围内声明)
语言是否保证有任何差异? 如果存在依赖于实现的行为,我如何调查不同平台上的差异?
(对于这个例子,我对将这些行为与 std::string 选项进行对比不感兴趣,尽管如果您认为其他读者会感兴趣,也可以随意谈论。)
【问题讨论】:
-
没有区别。
-
@TaylorFlores 没有区别吗?真的吗?
-
@TaylorFlores 是的!
-
哦?对不起,也许我应该问这个问题
-
@TaylorFlores 请阅读我的回答...
标签: c++ arrays string pointers constants