我需要了解這條線意味着
char A = strdup(const_cast<char*>(aString.c_str()));
我理解的strdup從這個做什麼:
strdup() - what does it do in C?
strdup需要一個const char指針。它的<,>上面的一部分,讓我困惑。
我需要了解這條線意味着
char A = strdup(const_cast<char*>(aString.c_str()));
我理解的strdup從這個做什麼:
strdup() - what does it do in C?
strdup需要一個const char指針。它的<,>上面的一部分,讓我困惑。
const_cast<type>
是一個C++運算符。你可以閱讀關於它here。
爲什麼它需要在這裏,因爲我不明白(假設aString
是std::string
型)c_str()
已經返回其strdup
需要const char*
,在任何情況下將const
內斯是隱式進行。
只有當函數收到非const
參數時,它纔是必需的,即使這樣它通常也不被推薦。
轉換操作符,
char * p = const_cast<char*>(q);
讓您免去常量性(前提是q是一個const char *)。
通常const_cast<T>
可用於添加或刪除const限定符。
但是,由於strdup
應該採取const char *
這裏不需要施放。
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*)
,事實證明這個特定的演員是毫無意義的。
'const_cast'不必要地將'c_str()'的結果從'char const *'轉換爲'char *' - 這裏沒有意義。 –
ildjarn
2012-02-21 19:01:38
**恭喜!**您發現了一個錯誤! – wilhelmtell 2012-02-21 19:02:32
那條線並不意味着什麼;它不會編譯。 (關於用指針類型初始化一個'char'的東西。) – 2012-02-21 19:33:21