c++ constructor question -
i still confused ctors:
question 1:
 why line 15 call a:a(int) instead of a:a(double&)?
question 2:
 why line 18 did not call a:a(b&)?
#include <iostream> using namespace std;  class b{};  class a{ public:    a(int )    {cout<<"a::a(int)"<<endl;}    a(double&){cout<<"a::a(double&)"<<endl;} // work if a(double), without &    a(b&){cout<<"a::a(b&)"<<endl;} };  int main() { /*line 15*/   obj((double)2.1);  // call a(int), why?    b obj2;    obj3(obj2); /*line 18*/   obj4(b);          // did not trigger output why? } 
line 15: a(double&) can take lvalues, i.e. variables can assigned to. (double)2.1 rvalue. use a(const double&) if need accept rvalues reference too.
line 18: b type, not value. a obj4(b); declares function name obj4 taking b , returning a.
Comments
Post a Comment