Há UB no código abaixo?
#include <iostream>
int* p_n;
class A
{
public:
A(int val) : n(val)
{
// At this point the compiler does not know if the object is const or not.
p_n = &n;
}
int n;
};
int main()
{
// A::n is const, because A is const, right?
const A a(1);
// but we change a const value here
*p_n = 2;
std::cout << a.n << std::endl;
return 0;
}
Existe alguma diferença entre atribuir *p_n
e fazer isso?
const_cast<A&>(a).n = 2;
EDITAR
Daqui :
const e semântica volátil (7.1.6.1) não são aplicadas em um objeto em construção. Elas entram em vigor quando o construtor para o objeto mais derivado (1.8) termina.
Enquanto o objeto a
está em construção, ele não é const
e a.n
não é const
, mas eles se tornam const
quando o construtor termina.
Então, p_n
aponta para o const
objeto ou não?