Всем привет.
Объясните плиз в краце или скажите, где про это почитать: почему нижеследующий код печатает "10"?
Почему вызывается соответствуйющий конструктор?
Заранее всем спасибо!
#include <iostream>
struct A
{
A() {}
A(int _i):i(_i){}
int i;
};
A f(A const &a)
{
return a.i;
}
int main()
{
A a(10);
std::cout << f(a).i << std::endl;
return 1;
}
Здравствуйте, Nickolas, Вы писали:
потому что f() у тебя возвращает A, а в return ты возвращаешь int. Но существует неявное преобразование int->A(A(int)).
Поэтому f() возвращает новый объект, созданный кончтруктором A(10).
Пеерепиши A в виде
struct A {
A() {}
explicit A(int _i):i(_i){}
int i;
};
и попробуй скомпилировать.
Здравствуйте, Nickolas, Вы писали:
N>Всем привет.
N>Объясните плиз в краце или скажите, где про это почитать: почему нижеследующий код печатает "10"?
N>Почему вызывается соответствуйющий конструктор?
что тебя смутило можно поподробней
N>Заранее всем спасибо!
N>N>#include <iostream>
N>struct A
N>{
N> A() {}
N> A(int _i):i(_i){}
N> int i;
N>};
N>A f(A const &a)
N>{
N> return a.i;
N>}
N>int main()
N>{
N> A a(10);
N> std::cout << f(a).i << std::endl;
N> return 1;
N>}
N>
Здравствуйте, Nickolas, Вы писали:
Всем спасибо, вопрос исчерпан
Виновата моя невнимательность