Непонятки с вызовом конструктора
От: Nickolas Чехия  
Дата: 24.05.06 09:56
Оценка:
Всем привет.
Объясните плиз в краце или скажите, где про это почитать: почему нижеследующий код печатает "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;
}
Re: Непонятки с вызовом конструктора
От: co  
Дата: 24.05.06 09:59
Оценка: 6 (1)
чтобы он не вызывался надо определить его как explicit
Re: Непонятки с вызовом конструктора
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 24.05.06 10:03
Оценка: 6 (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;
};

и попробуй скомпилировать.
http://denis-zhdanov.blogspot.com
Re: Непонятки с вызовом конструктора
От: Кирпа В.А. Украина  
Дата: 24.05.06 10:06
Оценка:
Здравствуйте, 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>
!0xDEAD
Re: Непонятки с вызовом конструктора
От: Nickolas Чехия  
Дата: 24.05.06 10:12
Оценка: :)
Здравствуйте, Nickolas, Вы писали:

Всем спасибо, вопрос исчерпан
Виновата моя невнимательность
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.