C++ 如何创建const char的静态const数组*
我试过下面这句话:C++ 如何创建const char的静态const数组*,c++,C++,我试过下面这句话: static const const char* values[]; 但我在VC++警告C4114上得到以下警告: 多次使用同一类型限定符 正确的声明是什么?目标是创建一个不可变的c字符串数组。试试看 static const char* const values[]; 想法是将两个常量放在*的两侧:左侧属于字符(常量字符),右侧属于字符*(常量指针指向字符)您编写的常量常量而不是静态常量字符*常量值[](其中,您将指针和基础值定义为const) 此外,您还需要对其进行
static const const char* values[];
但我在VC++警告C4114上得到以下警告:
多次使用同一类型限定符
正确的声明是什么?目标是创建一个不可变的c字符串数组。试试看
static const char* const values[];
想法是将两个
常量放在*
的两侧:左侧属于字符
(常量字符),右侧属于字符*
(常量指针指向字符)您编写的常量常量
而不是静态常量字符*常量值[]代码>(其中,您将指针和基础值定义为const
)
此外,您还需要对其进行初始化:
静态常量字符*常量值[]={“字符串一”、“字符串二”}
我是否理解正确,第一个常量用于字符串,第二个常量用于数组?为了澄清关键字const
:Aconst
始终与它左边的“项”相关。例外情况是,当const是表达式中的第一个单词时,它就与它的右项相关。因此,为了非常正确,可以将字符串定义为static char const*const values[]
,它可以从右到左读取:值是指向const chars的常量指针数组,所有这些都是静态的。@AquilaRapax以这种方式编写定义实际上有很多原因。typedef在其他方面非常混乱:typedef const char*CPtr;const-CPtr-var
并不是它看起来的意思,其中astypedef char const*CPtr;CPtr常数var代码>更清晰。@JamesKanze:[]
的优先级大于*
,并且由于*
是从右侧添加的,所以常量也是如此。没关系,我在回答9年前的问题。