【发布时间】:2014-08-11 01:05:46
【问题描述】:
在只读内存上创建数组字面量的可能性,以字符串字面量的形式存在,但不会扩展到其他类型。
const char* const kChar1{"This is a name"};
const char kChar2[]={"This is a name"};
const int* const kInt1{5,3,2,6,9,0,0,2}; //error
const int kInt2[]{5,3,2,6,9,0,0,2};
我无法像创建 kChar1 一样创建 KInt1。
我怎样才能创建等价物?
【问题讨论】:
-
C++ 没有数组字面量。使用
kInt2有什么问题? -
@RSahu OP 想要在只读内存中创建数组
-
字符串文字不一定存储在只读内存中......它留给实现;尝试写入它的效果是不确定的。很少有理由想要像
kChar1... 这样的东西只是浪费空间来放置额外的指针。 -
@TonyD 你能详细说明一下吗?在大多数情况下,可能 kChar1 和 kChar2 都可以优化以生成相同的代码,但不管这一点,kChar2 将消耗数据内存来存储整个字符串,并使用代码内存来初始化它。您确定 kChar2 总是或至少在大多数情况下是更好的解决方案吗?
-
@nunojpg:实际上
static const char kChar3[] = {"This is a name"};在我尝试过的编译器上是最佳实践……只使用只读数据段。如果没有staticGCC 和 MSVC 复制到基于堆栈的数组,即使变量标记为const- 我不知道为什么。
标签: c++ literals string-literals