2012-06-29 43 views
0

忽略它是如何令人厭惡和不安的,下面保證是安全的嗎?如果不是,爲什麼?是否將const char數組強制轉換爲頭中的整數總是安全的?

//.h 
struct foo 
{ 
const static intptr_t KEY = (intptr_t) "VALUE"; 
}; 

//.cpp 
void useFoo() 
{ 
const char * value = (const char *) foo::KEY; 
printf("%s",value); 
} 
+0

好奇,你爲什麼要這麼做? – jrok

+0

作爲一個窮人的方式來初始化標頭中的常量靜態字符串。在C++ 0x之前,你只能在頭文件中初始化整型。你可以使用#define,或者你可以初始化.cpp中的字符串。我想知道這是否是另一種達到相同結果的方式。 – tgoodhart

回答

3

不僅代碼不能保證安全,代碼也不合格。

"VALUE"的類型爲char const[6],它不能通過static_cast轉換爲intptr_t

+0

我使用了錯誤的類型。如果可能的話,我試圖避免使用C風格的演員。問題的精神在於將字符數組文本的開始地址轉換爲頭中的整數,然後在.cpp中恢復它。 – tgoodhart

2

保證不編譯。您不能使用static_cast將指針轉換爲整型或反之。如果它是reinterpret_cast那麼它會是易碎的至少可以這樣說,因爲編譯器可以進行常量摺疊,並且KEY可能會變得不唯一。

此外,您應該在您的應用程序中定義靜態成員變量KEY

+0

與詹姆斯相同的評論。 – tgoodhart

相關問題