У меня есть следующий код С++. Я могу скомпилировать его с помощью g++ 4.9.2 на машине с Linux. Затем, когда я запускаю его, он печатает 10. Кажется, что новый объект создается и назначается указателю, созданному с помощью const_cast в конструкторе по умолчанию. Утечек памяти нет (проверил с помощью valgrind). Это какое-то неопределенное поведение или это законно?
#include <iostream>
using namespace std;
class A
{
public:
A() : x(0)
{
A *tmp = const_cast<A*>(this);
*tmp = A(10);
}
A(int x)
{
this->x = x;
}
int getX() const
{
return x;
}
private:
int x;
};
int main()
{
A a;
cout << a.getX() << endl;
return 0;
}
this
не должно быть константой в конструкторе, поэтому константное приведение ничего не делает. - person tkausl   schedule 14.03.2017const_fast
иthis
в конструкторе? - person WhozCraig   schedule 14.03.2017const_cast
не имеет к этому никакого отношения. Вы могли бы просто сделать*this = A(10)
. Илиx = 10
:-) - person Bo Persson   schedule 14.03.2017