转换const将它传递给需要引用的函数,会发生什么?

时间:2011-01-30 21:31:24

标签: c++ casting parameter-passing const-cast

任何人都可以告诉我在主要传递给g时会发生什么,是静态广播吗?

int  & g (int&x){x++ ; return x ; } 
int main()
{

   const int a=5 ; 
   cout<<g((int&)a)<<endl; 
}

我确信没有复制,因为上面的代码类似于下面的代码:

class A
{
public:
    A()
    {
        cout << "calling DEFAULT constructor\n\n";
    }
    A(A& Other)
    {
        cout << "Calling COPY constructor\n\n";
    }
    ~A()
    {
        cout << "Calling DESTRUCTOR\n\n";
    }
};

A& g(A& x)
{
    cout << "Inside g(A& x) \n\n";
    return x;
}

void main()
{
    const A a;
    g(const_cast<A&>(a));
}*/

提前致谢:)

3 个答案:

答案 0 :(得分:8)

static_cast无法移除constness。这是const_cast

在运行时,此代码(第一个示例)会产生未定义的行为,因为您修改了const对象。

答案 1 :(得分:1)

C风格的演员阵容是一件恶毒的事情 - 它将完成reinterpret_cast<>const_cast<>所做的一切。这是“电锯易于使用的电锯的力量”之一,C正确地臭名昭着。

使用C ++风格的演员表明你需要做const_cast<>,然后你应该问问自己为什么并找到一个更好的方法。

答案 2 :(得分:0)

对于int,只需传递引用就不需要代码。你的演员可以编译它。