[c++] conversion constructor
class Aconst A&
{
public:
int a;
A(int x): a(x){}
}
и функция
void show(A& a)
{
////
}
можно подробнее?
{
////
}
не совсем понятно требования конст для аргумента функции
double d = 1.0;
double& dr = d; // тут dr ссылка на d
dr = 2.0; // поменяли d
assert(d == 2.0);
int i = 1;
double& ir = i; // тут ir ссылка на временный объект.
ir = 2; // поменяли временный объект
assert(i == 1);
Как видишь при одинаковом синтаксисе, семантика сильно отличается. Чтобы избежать этого, разрешили делать только константные ссылки на временные объекты.
допустим я show(4), но 4 это временный объект и 4 мы не можем передать ссылке на обьект класса, а только константой ссылке?
да
Как видишь при одинаковом синтаксисе, семантика сильно отличаетсянеочевидности никогда не пугали стандартописателей
у тебя есть ссылочки полезные, где разжевали бы причину запрета создавать неконст ссылки на временные объекты? лично я не вижу каких-то технических (привет Visual Studio) или концептуальных проблем
пример как нынче разрешено иметь неконст ссылки на временные объекты
int main()
{
int i = 0;
double&& d = i;
d = 1.0;
return 0;
}
http://ideone.com/QmQ6tF
Можно сделать так:
A a(4);
Show(a);
Вообще твой код дурно пахнет. Во-первых, нехорошо делать не explicit конструкторы от одного аргумента. Во-вторых, зачем методу Show нужна неконстантная ссылка на A? Он изменяет состояние аргумента?
int i = 0;Зато ты не можешь сделать так:
double&& d = i;
double d = 1.0;
double&& dr = d;
получишь ошибку "rvalue reference to type 'double' cannot bind to lvalue of type 'double'".
у тебя есть ссылочки полезные, где разжевали бы причину запрета создавать неконст ссылки на временные объекты? лично я не вижу каких-то технических (привет Visual Studio) или концептуальных проблемНет.
Я тоже не вижу технических ограничений.
Оставить комментарий
bigbill
допустим, что естьclass A
{
public:
int a;
A(int x): a(x){}
}
и функция
void show(A& a)
{
////
}
когда я пытаюсь вызвать show(10) то получаю сообщение об ошибке, разве conversion constructor не должен автоматически конвертировать 10 в объект класса А?