Am 06.11.15 um 20:40 schrieb Chris Angelico:
On Sat, Nov 7, 2015 at 6:30 AM, Bartc <b...@freeuk.com> wrote:
Is there no way then in Python to declare:

    pi = 3.141519     # etc

and make it impossible to override?

Nope. Even in C++, where classes can define certain things as const,
private, and other such restrictions, you can always get around them
by manipulating pointers appropriately.

No, that is not right. If you cast away the constness from a pointer to a constant, you can technically write to that memory, but the behaviour is undefined - another way of saying that the program is illegal.

In many cases, the compiler will inline the constant - because you promised, that it can't change - and the update to the constant will not change in all parts of the program:


apfelkiste:Tests chris$ cat constub.cpp
#include <iostream>

void call_by_ref(const double &v) {
        std::cout<<"In function: v="<<v<<std::endl;
}

int main() {
        const double pi=3.14;
        double *errptr = const_cast<double*>(&pi);
        *errptr= 0.0;
        std::cout<<"Now pi is "<<pi<<std::endl;

        call_by_ref(pi);
        return 0;
}
apfelkiste:Tests chris$ g++ constub.cpp
apfelkiste:Tests chris$ ./a.out
Now pi is 3.14
In function: v=0


        Christian



--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to