Конструктор по умолчанию, определенный с аргументами по умолчанию вне определения класса, почему это работает? и что происходит с задействованными шаблонами?

Я понимаю, что это плохой тоном и эти значения по умолчанию должны быть указаны в объявлении, но позвольте мне немного побаловать себя ... почему это компилируется? и что именно происходит?

#include <iostream>
using namespace std;

class test
{
public:
    test(int n);
};

test::test(int n = 666)
{
    cout << n;
}

int main()
{
    test t;

    cin.sync();
    cin.ignore();

    return 0;
}

Вывод: 666

.. как сделать шаблоны влияют на один и тот же фрагмент кода?

template <class T>
class test
{
public:
    test(int n);
};

template <class T>
test<T>::test(int n = 666)
{
    cout << n;
}

int main()
{
    test<int> t;

    cin.sync();
    cin.ignore();

    return 0;
}

Ошибка: нет подходящего конструктора по умолчанию

Спасибо за ваше время!

6
задан whysoconfused 24 July 2011 в 07:30
поделиться