приведение const для передачи функции, которая принимает ссылку, что происходит? - PullRequest
0 голосов
/ 31 января 2011

Может кто-нибудь сказать мне, что происходит здесь при переходе к 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));
}*/

Заранее спасибо:)

Ответы [ 3 ]

8 голосов
/ 31 января 2011

static_cast не может удалить константу.Это const_cast.

Во время выполнения этот код (первый пример) приводит к неопределенному поведению, поскольку вы изменяете объект const.

1 голос
/ 31 января 2011

Состав в стиле C - порочная вещь - он будет делать все, что будет делать reinterpret_cast<> или const_cast<>.Это одна из тех «мощностей бензопилы с простотой использования бензопилы», для которых справедливо печально известна С.1005 *, и тогда вы должны спросить себя, почему и найти лучший способ сделать это.

0 голосов
/ 31 января 2011

Для int нет кода, необходимого для простой передачи ссылки. Ваше приведение позволяет компилировать.

...