У меня есть следующая программаКогда и как вызван конструктор при передаче аргументов по ссылке?
#include <iostream>
class A
{
public:
A(int n = 0)
: m_n(n)
{
std::cout << 'd';
}
A(const A& a)
: m_n(a.m_n)
{
std::cout << 'c';
}
private:
int m_n;
};
void f(const A &a1, const A &a2 = A())
{
}
int main()
{
f(3);
std::cout << std::endl;
return 0;
}
Эта программа производит "DD" в качестве выходного сигнала. Я не понимаю, почему конструктор вызывается для первого параметра функции «f». Я передаю ему целое число «3» и вызывает конструктор для «a1» с аргументом «3». Как это происходит?
Копия c'tor не называется. Вызывается «преобразование из int» c'tor. – StoryTeller
Где вы видите копию c'tor? 'c' не входит в выход. – Erbureth
Я не понимаю проблему. Ничто не кажется странным или запутанным здесь, и вы не сказали нам, что это такое, что вы считаете странным. –