如何创建一个静态的常量字符指针数组

12
我尝试了以下这行代码:
static const const char* values[]; 

但我在VC++上收到以下警告:警告C4114:

同一类型限定符使用超过一次。

正确的声明是什么?目标是创建一个不可变的c字符串数组。

2个回答

24

您写成了 const const,应该是 static const char* const values[];(其中指针和底层值都被定义为const

此外,您需要进行初始化:

static const char* const values[] = {"string one", "string two"};


我理解的对吗,第一个const是用于字符串,第二个是用于数组? - Tommy
10
为了澄清关键词 constconst 总是与其左侧的“项”相关联。唯一的例外是,当 const 是表达式中的第一个词时,它与其右侧的项目有关。因此,为了非常准确,应将字符串定义为 static char const * const values[],可以从右向左阅读:values 是一个指向常量字符的常量指针数组,并且所有这些都是静态的。 - AquilaRapax
@AquilaRapax,你写定义的方式实际上有很多原因。否则typedef会非常令人困惑:typedef const char* CPtr; const CPtr var;并不意味着它可能看起来的那样,而typedef char const* CPtr; CPtr const var;则更加清晰明了。 - James Kanze
1
@JamesKanze:[ ] 的优先级高于 *,而且由于 * 是从右边添加的,所以 const 也是如此。不用担心,我在回答你九年前的问题。 - VimNing

5

尝试

static const char* const values[];

这个想法是将两个const放在*的两侧:左边属于char(常量字符),右边属于char*(常量指向字符的指针)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接