簡體   English   中英

強制轉換const以將其傳遞給具有引用功能的函數,會發生什么?

[英]casting const to pass it to function that takes reference, what happens?

誰能告訴我在傳遞給main中的g時會發生什么,它是static_cast嗎?

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));
}*/

提前致謝 :)

static_cast無法刪除常量。 這是const_cast

在運行時,此代碼(第一個示例)產生未定義的行為,因為您修改了const對象。

C風格的強制轉換是一件惡毒的事情,它將完成reinterpret_cast<>const_cast<> 這是C正確的臭名昭著的“電鋸的力量和易用的電鋸”之一。

使用C ++樣式的強制類型轉換將表明您需要執行const_cast<> ,然后您應該問自己為什么,並找到一種更好的方法。

對於int,不需要傳遞引用的任何代碼。您的強制轉換可以對其進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM