Приведение const для передачи его функции, которая принимает ссылку, что происходит?
Может кто-нибудь сказать мне, что здесь происходит при переходе к 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 ответа
static_cast
не может удалить константность. Это const_cast
,
Во время выполнения этот код (первый пример) приводит к неопределенному поведению, поскольку вы изменяете объект const.
Состав в стиле C- порочная вещь - он будет делать все, что reinterpret_cast<>
или const_cast<>
Сделаю. Это одна из тех "мощностей бензопилы с простотой использования бензопилы", для которых C по праву пользуется дурной славой.
Использование приведений в стиле C++ покажет, что вам нужно сделать const_cast<>
, а затем вы должны спросить себя, почему и найти лучший способ сделать это.
Для int нет никакого кода, необходимого просто для передачи ссылки. Ваш привод позволяет его компилировать.