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

Tam*_*ash 0 c++ casting parameter-passing const-cast

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

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

   const int a=5 ; 
   cout<<g((int&)a)<<endl; 
}
Run Code Online (Sandbox Code Playgroud)

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

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));
}*/
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

Jam*_*lis 8

static_cast无法删除constness.这是一个const_cast.

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

  • @Fred:我的理解是表达式只在计算时产生未定义的行为.所以,我认为未定义的行为仅限于运行时,因为无法保证表达式将被计算(例如,另一个转换单元可能有一些静态初始化调用`std :: exit()`,并且因为那将在之前发生输入`main()`,不会计算表达式.) (2认同)