0

メインで 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));
}*/

前もって感謝します :)

4

3 に答える 3

8

static_castconstness を削除することはできません。これはconst_cast.

const オブジェクトを変更するため、このコード (最初の例) は実行時に未定義の動作を引き起こします。

于 2011-01-30T21:33:18.997 に答える
1

C スタイルのキャストは悪質です。areinterpret_cast<>または aconst_cast<>が行うすべてのことを行います。これは、C が正しく悪名高い「チェーンソーの使いやすさを備えたチェーンソーのパワー」の 1 つです。

C++ スタイルのキャストを使用するconst_cast<>と、.

于 2011-01-30T21:36:46.117 に答える
0

int の場合、参照を渡すだけのコードは必要ありません。キャストによってコンパイルできます。

于 2011-01-30T21:34:41.130 に答える