By default, the result of a static_cast is a r-value. It can't be used as a l-value, and thus can't be given a new value.
Such misuse will lead to compile errors. But the report from the compiler can be misleading or quite hard to understand. For example, suppose we have a base class Base and a derived class Derived from Base. We want to overload the istream >> operator for Derived. The following way to overloading the operator does not work:
istream & operator >> (istream &is, Derived &derived) {
// special processing
is >> static_cast<Base>(derived);
}
This is because the result for casting will be passed as a reference function parameter. The reported error from the compiler has nothing to do with cast, however, and it simply sais that there is no match for operator >> from ...
It should be noticed that even if the cast is done for pointers, the results are still r-values.
To avoid the above problem, use static_cast<Base&>.
Monday, March 10, 2008
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment