L
Apeman schrieb:
ne, eben nicht. das hier:
const int not_const = 123;
int main ()
{
*(int*)¬_const = 456;
}
sollte in C und C++ compilieren, aber es wird sehr wahrscheinlich crashen (undefiniert). in C++, mit einem const_cast<int> statt (int) versehen, wär' der code womöglich sogar okay .
dagegen bieten #defines und enums keine möglichkeit für solche faxen. darum sind sie wirklich 'const'
Da hast Du insofern Recht, als dass man von einer solchen Konstanten anders als beim enum die Adresse nehmen darf. Aber wie Camper und Du anschließend auch schon feststellten, darf man dieser Adresse das const nicht wegcasten, das ist undefiniert. Const wegcasten ist nur definiert wenn das eigentliche Objekt non-const ist (und z.B. an eine const Referenz gebunden wurde).
Darüberhinaus kann man sich im Assembler davon überzeugen, dass solche Konstanten tatsächlich durch ihre Werte ersetzt werden, wenn man sie im Code als Wert benutzt (also nicht ihre Adresse nimmt).