2012-02-21 62 views
1

可能重複:
behaviour of const_cast類型轉換?模板....這是什麼cpp代碼行?

我需要了解這條線意味着

char A = strdup(const_cast<char*>(aString.c_str())); 

我理解的strdup從這個做什麼:

strdup() - what does it do in C?

strdup需要一個const char指針。它的<,>上面的一部分,讓我困惑。

+0

'const_cast '不必要地將'c_str()'的結果從'char const *'轉換爲'char *' - 這裏沒有意義。 – ildjarn 2012-02-21 19:01:38

+4

**恭喜!**您發現了一個錯誤! – wilhelmtell 2012-02-21 19:02:32

+0

那條線並不意味着什麼;它不會編譯。 (關於用指針類型初始化一個'char'的東西。) – 2012-02-21 19:33:21

回答

3

const_cast<type>是一個C++運算符。你可以閱讀關於它here

爲什麼它需要在這裏,因爲我不明白(假設aStringstd::string型)c_str()已經返回其strdup需要const char*,在任何情況下將const內斯是隱式進行。

只有當函數收到非const參數時,它纔是必需的,即使這樣它通常也不被推薦。

1

轉換操作符,

char * p = const_cast<char*>(q); 

讓您免去常量性(前提是q是一個const char *)。

通常const_cast<T>可用於添加或刪除const限定符。

但是,由於strdup應該採取const char *這裏不需要施放。

1
      aString 

一個變量,可能類型的std::string

      aString.c_str() 

const char *指向空終止char小號

 const_cast<char*>(aString.c_str()) 

的鑄造的陣列,轉換即內部()值到名爲<>的類型。在這種情況下,從const char*轉換爲char*。這是C++風格的演員(另請參閱static_cast<>(),dynamic_cast<>()reinterpret_cast<>())。

strdup(const_cast<char*>(aString.c_str())); 

正如你所說,你知道strdup做什麼。由於strdup的簽名大概是char* strdup(const char*),事實證明這個特定的演員是毫無意義的。