1

我想知道它是否正确 C++ :

static char *arrayExample[]  = 
{
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h"
};
4

2 回答 2

5

我想知道用 C++ 编写是否正确

static char *arrayExample[]  = 
{
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h"
};

即使您不添加const修饰符,它是否也能编译?是的,但它具有误导性。字符串字面量存储在内存区域中,源代码的所有字符串字面量一个接一个地保存在该内存区域中。这意味着你不应该弄乱它(在 PC 中它不会发生。但它可以映射到 ROM 内存)。

所以,基本是对的。但是,这个字面量数组并不是要修改的,因此您最好将其重写为:

static const char *arrayExample[]  = 
{
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h"
};

您已将其声明为static:这意味着它只能在其自己的翻译单元中可见(即,它被创建的那个 cpp 文件)。如果那是您的意图(您不打算在翻译单元之间共享它),那完全没问题。

希望这可以帮助。

于 2013-05-30T07:44:55.283 回答
0

如果你尝试用编译-Wall器编译会警告你

警告:不推荐将字符串常量转换为 'char*'</p>

“x”常量字符串数组使数组初始化,而声明只是

static char *

说的没错,但是您可以尝试修改数组的一项,例如

*arrayExample[2] = 'x'; // runtime error / crash / undefined behavior

添加const会删除编译器警告,并防止您编写一些会覆盖只读值的代码,这些代码会编译,但会在运行时崩溃。const尝试覆盖char *数组中的一项时,编译器会因错误(而不是警告)而停止。

static const char *
于 2013-05-30T07:50:08.857 回答