我通常在C/C++代碼中使用C類型鑄造。我的問題是,在轉換類型中添加「const」關鍵字對結果意味着什麼?用「const」關鍵字C類型鑄造
例如,我能想起來的幾個場景:
const my_struct *func1()
{
my_struct *my_ptr = new my_struct;
// modify member variables
return (const my_struct *)my_ptr;
// return my_instance;
}
在這其中,功能構建一個結構的新實例,並鑄造一個常量指針,因此調用者就不能進一步修改其內部狀態,但刪除它。是否需要「推薦」或者根本不需要「const」轉換,因爲任何return語句都可以工作。
在這一個中,my_base
是my_derive
的基類。
const my_base *func2(const my_derive *my_ptr)
{
return (const my_base *)my_ptr;
// return (my_base *)my_ptr;
}
由於my_ptr
已經是一個常量指針,將與(my_base *)
鑄造它涉及對返回時,取出常量和另一個隱含的const_cast const_cast類型轉換?
是否有任何理由將「const」添加到整數函數參數,因爲更改它永遠不會影響函數外部的狀態?
void func3(const int i)
{
// i = 0; is not allowed, but why, as it is harmless?
}
如何在投射整數時加入「const」?我認爲這應該類似於func2()
。
void func4(short i)
{
const unsigned int j = (const unsigned int) i;
// const unsigned int j = (unsigned int) i;
}
糾正我,如果我錯了。考慮到類型轉換可能是一個常見問題解答,我不確定這個問題是否與其他問題重複。謝謝!
這個問題提到了「C/C++」,這是一個壞主意。特別是在這裏,因爲雖然C和C++都有一個「const」關鍵字,但它的含義卻非常不同。 – Gilles 2010-08-06 18:34:07