Учитывая
struct C {
C() { printf("C::C()\n" ); }
C(int) { printf("C::C(int)\n" ); }
C( const C& ) { printf("copy-constructed\n"); }
};
И шаблонная функция
template< typename T > void foo(){
// default-construct a temporary variable of type T
// this is what the question is about.
T t1; // will be uninitialized for e.g. int, float, ...
T t2 = T(); // will call default constructor, then copy constructor... :(
T t3(); // deception: this is a local function declaration :(
}
int main(){
foo<int>();
foo<C >();
}
Глядя на t1
, он не будет инициализирован, когда T
, например. int
. С другой стороны, t2
будет скопировано из созданного по умолчанию временного объекта.
Вопрос: возможно ли в С++ создать общую переменную по умолчанию, кроме как с шаблоном-фу?