我通常在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