2016-12-25 5 views
1

Я пытаюсь использовать конструктор шаблонов с одним параметром. Я пробую 2 случая const параметр и не const.шаблон конструктор один параметр const и не const

class Foo1 
{ 
public: 
    Foo1() {} 
    template <typename T> 
    Foo1(const T& f) 
    { 
     cout<<"Foo1"<<endl; 
    } 
}; 
class Foo2 
{ 
public: 
    Foo2() {} 
    template <typename T> 
    Foo2(T& f) 
    { 
     cout<<"Foo2"<<endl; 

    } 
}; 

int main() 
{ 
    Foo1 f1; 
    Foo1 f11(f1); 
    Foo2 f2; 
    Foo2 f21(f2); 
} 

Выход: Foo2

так по умолчанию конструктор копирования создается для Foo1 и не Foo2.

когда я изменяю основную функцию, чтобы:

int main() 
{ 
    const Foo1 f1; 
    Foo1 f11(f1); 
    const Foo2 f2; 
    Foo2 f21(f2); 
} 

Выход пуст:

так как копия Построенные geerated. Почему это поведение?

ответ

1

так что конструктор копирования по умолчанию создан для Foo1, а не для Foo2.

Неправильно.

Обе копии Конструкторы генерируются, но

template <typename T> Foo2(T& f) // with T = Foo2 

это лучше (точнее) совпадение, чем конструктор копирования, как вы пройти нон constFoo2.

 Смежные вопросы

  • Нет связанных вопросов^_^