Допустим, у меня есть класс A:Const ссылка инициализации класса
class A {
int i;
public:
A(){};
A(int i){this->i=i;};
};
И простой тест функции:
void test(const A &a){...}
Теперь, если я:
int main()
{
test(2);
}
It компилируется, и он будет вызывать конструктор A(int i)
. Но когда я изменяю аргумент как не const: void test(A &a)
Я получаю ошибку компиляции.
В чем разница между этими случаями, почему первая разрешена, а вторая нет, и что на самом деле происходит при инициализации первого случая?
см. Http://stackoverflow.com/questions/8293426/error-invalid-initialization-of-non-const-reference-of-type-int-from-an-rval – twin
Думаю, вам стоит взглянуть на [это ] (http://stackoverflow.com/questions/3895647/why-const-for-implicit-conversion) тоже. – meJustAndrew