在其中一个 C++ 程序中,我看到了一个函数原型:int Classifier::command(int argc, const char*const* argv)
是什么const char*const* argv
意思?是一样的const char* argv[]
吗?const char** argv
是不是也一样的意思?
在其中一个 C++ 程序中,我看到了一个函数原型:int Classifier::command(int argc, const char*const* argv)
是什么const char*const* argv
意思?是一样的const char* argv[]
吗?const char** argv
是不是也一样的意思?
来自C++ 超级常见问题解答:
从右到左阅读指针声明。
const X* p
意思是“p
指向X
那个是const
”:X
对象不能通过p
.X* const p
表示“p
是const
指向”X
的指针non-const
:您不能更改指针本身p
,但可以通过.X
p
const X* const p
表示“p 是const
指向 anX
的指针const
”:您不能更改指针本身p
,也不能通过.X
p
而且,哦,是的,我是否提到要从右到左阅读您的指针声明?
const char * const *
等同于char const * const *
:指向 const 的(非 const)指针 指向 const char 的指针。
const char *
等同于char const *
:指向 const char 的(非常量)指针。
const char * *
等同于char const * *
:指向 const char 的(非常量)指针的(非常量)指针。
不,它不一样const char *argv[]
。禁止在特定的const
取消引用级别修改取消引用的值:
**argv = x; // not allowed because of the first const
*argv = y; // not allowed because of the second const
argv = z; // allowed because no const appears right next to the argv identifier
const char*const* argv
意思是“指向常量的指针char
”。它与 不“相同” const char *argv[]
,但在某种程度上兼容:
void foo(const char *const *argv);
void bar(const char **argv)
{
foo(argv);
}
编译就好了。(如果没有 .,反向将无法编译const_cast
。)
一个不改变的指针指向一个不改变的字符串:
const char* aString ="testString";
aString[0] = 'x'; // invaliv since the content is const
aString = "anotherTestString"; //ok, since th content doesn't change
const char const* bString = "testString";
bString [0] = 'x'; still invalid
bString = "yet another string"; // now invalid since the pointer now too is const and may not be changed.