2

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

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

我可以做吗?

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

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

4

1 回答 1

1

前 c++11

T x = T();

在这里阅读 -链接

T3 var3 = {};

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

资源

于 2016-01-08T18:33:25.543 回答