2012-04-05 104 views
11

在C++程序中的一個,我看到了一個函數原型:int Classifier::command(int argc, const char*const* argv)C++:爲const char * const的*的含義

是什麼const char*const* argv意思?是否與const char* argv[]相同? const char** argv也是一樣的嗎?

+7

http://cdecl.org/ – 2012-04-05 13:09:33

+1

@LuchianGrigore是的,知道了它 – 2012-04-05 13:10:37

+1

從右到左閱讀(主要),const指針指向(const char) 。 – 2012-04-05 13:51:08

回答

5

不,它與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 
3

C++ FAQ Lite

弗雷德常量* const p表明 「p是一個常量指針到常量弗雷德」:你不能改變指針p,也不能通過p修改Fred對象。

const char * const *char const * const *相同:指向常量字符的常量指針的非常量指針。

const char *char const *相同:指向const char的(非const)指針。

const char * *char const * *相同:指向常量字符的非常量指針的非常量指針。

3

不改變爲一個字符串的指針不會改變:

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. 
3

const char*const* argv指「指針恆定指針到不變的char「。這不是「同」爲const char *argv[],但它在一定程度上兼容:

void foo(const char *const *argv); 

void bar(const char **argv) 
{ 
    foo(argv); 
} 

編譯就好了。 (反過來不會編譯沒有const_cast。)

相關問題