On 07/12/10 05:51, Steven Schveighoffer wrote:
On Mon, 06 Dec 2010 14:04:43 -0500, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Monday, December 06, 2010 07:37:27 Steven Schveighoffer wrote:

It should be relatively painless. Just change the signatures of the base
functions, and fix any compile errors.

And watch all the code break... I'll definitely welcome the change (it's probably the first bug that I voted on in bugzilla), but there will be tons of code broken by it, since you just _know_ that a lot of user code doesn't bother to make toString() and its friends const. It's still a change that needs to be made
though. Being unable to properly compare const and immutable objects is
crippling. Of course, it would be more of an issue if it were easier to actually create immutable objects which are classes rather than strcuts, but that's a
separate issue.

Yes, one of the issues is that const has a viral effect. If you ignore const, none of your functions are const. So if you use functions inside opEquals, those have to be marked as const, and so on.

But there are very few circumstances where opEquals needs to be marked as mutable. If that is the case, there is something broken with your code (and you should fix it) or there's something wrong with code you use (and you'll have to insert casts to deal with it for now). In a very small number of circumstances, non-const opEquals can be beneficial (such as caching data that is expensive to calculate). We need to find another way to deal with that (I suggest having logical const, but that's not a popular idea with Walter :). But it shouldn't detract from the requirements. You can always circumvent if you need special cases. I'd rather start from a solid const-supporting position and add holes where they make sense then start from a base that is full of holes and try to patch them slowly.

In many cases affixing const to your code is not just a simple 'slap a const on here'. It can involve careful thought and possibly redesign.

But without these changes, const is very useless, the standard library needs to eat its own dogfood if we want to peddle it to others.

-Steve
Vote++

--
Graham St Jack

Reply via email to