【问题标题】:C++ read-only array literalC++ 只读数组字面量
【发布时间】: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"}; 在我尝试过的编译器上是最佳实践……只使用只读数据段。如果没有 static GCC 和 MSVC 复制到基于堆栈的数组,即使变量标记为 const - 我不知道为什么。

标签: c++ literals string-literals


【解决方案1】:

这相当接近:

const int kInt2[]{5,3,2,6,9,0,0,2};
const int* const kInt1 = kInt2;

唯一真正的区别是 kInt1 必然指向与 kInt2 相同的内存,但 kChar1 不一定指向与 kChar2 相同的内存。

【讨论】:

    【解决方案2】:

    我认为这是正确的

    const int one = 5;
    const int two = 10;
    const int* const kInt1[] ={&one,&two};
    

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      相关资源
      最近更新 更多