c++ - OpenCV gets aways with assigning to a const reference? -
i stumbled upon piece of code in opencv source ( cxoperations.hpp, line 1134, in definition of vector class ):
vector(const vector& d, const range& r) { if( r == range::all() ) r = range(0, d.size()); // more stuff... } note vector class has no data member called r (and indeed, identifier r occurs in 1 more place in entire class definition, parameter in method). apparently, right there assignment const reference.
i tried reproduce minimal example:
#include <iostream> class foo { public: int _a; foo(int a) : _a(a) {} }; int main() { foo x(0); const foo& y = x; printf("%d\n", y._a); y = foo(3); printf("%d\n", y._a); } this, of course, fails compile: g++ gives error
test.cpp:15: error: passing `const foo' `this' argument of `foo& foo::operator=(const foo&)' discards qualifiers the way got work overriding operator= this:
#include <iostream> class foo { public: int _a; foo(int a) : _a(a) {} foo& operator=(foo rhs) const { foo& tmp = const_cast<foo&>(*this); tmp._a = rhs._a; return const_cast<foo&>(*this); } }; int main() { foo x(0); const foo& y = x; printf("%d\n", y._a); y = foo(3); printf("%d\n", y._a); } this compiles, , prints "0 3" expected. problem here that
- anyone writes code should have hands cut off
- in opencv source above, there no redefinition of
operator=takesrangeparameters (range-related functions above definition ofvector, starting @ line 1033)
obviously i'm missing something, since opencv source compiles. question is, going in in r = range(0, d.size()); line makes legal?
i notice cv's vector class template. if class method never instantiated, there no compiler error. guess if try
vector<int> a; vector<int> b(a, range::all()); you'll compiler error on suspicious-looking line. can report bug in opencv source.
Comments
Post a Comment