[英]C++ : Meaning of const char*const*
在其中一個C++的程序中,看到了一個function的原型: int Classifier::command(int argc, const char*const* argv)
const char*const* argv
是什么意思? 它與const char* argv[]
相同嗎? const char** argv
也是這個意思嗎?
來自C++超級FAQ :
從右到左閱讀指針聲明。
const X* p
表示“p
指向一個X
是const
”:X
object 不能通過p
改變。X* const p
的意思是“p
是一個指向non-const
的X
的const
指針”:您不能更改指針p
本身,但可以通過p
更改X
object 。const X* const p
的意思是“p 是指向const
的X
的const
指針”:您不能更改指針p
本身,也不能通過p
更改X
object。而且,哦,是的,我有沒有提到從右到左閱讀您的指針聲明?
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.
常量字符*常量*一個;
基本上說:a 是指向不可更改的 const char 指針的指針。
所以這將是一個有效的代碼:const const const char*const*const* a;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.