如何在C ++ 03中初始化模板类型的对象

时间:2016-01-08 18:30:54

标签: c++ c++03 c++98 most-vexing-parse

假设我有一个函数模板,并且想要声明一个值初始化的对象:

template<typename T>
void foo() {
    // declare and default-initialize 'x' of type 'T'
}

我可以这样做吗?

  • T x;对原始类型失败,因为它使它们未初始化,
  • T x();由于最令人烦恼的解析而失败
  • T x = T();需要复制构造函数,并且不需要编译器以及副本
  • T x{};失败,因为我们没有使用C ++ 11。

我希望自己是个白痴,忽略了一些明显的东西,但我没有看到答案。

1 个答案:

答案 0 :(得分:1)

Pre c ++ 11

T x = T();

请在此处阅读 - link

T3 var3 = {};
  

第三种形式T3 var3 = {}初始化聚合,通常是“C风格”结构或“C风格”数组。但是,对于具有显式声明的构造函数的类,不允许使用该语法。

source