【问题标题】:How to value-initialize an object of a template type in C++03如何在 C++03 中对模板类型的对象进行值初始化
【发布时间】:2016-01-08 18:30:53
【问题描述】:

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

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

我可以吗?

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

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

【问题讨论】:

  • T x 是默认初始化。值初始化直到 C++03 才存在。
  • 你说得对,我已经编辑了
  • Boost 答案可能是最好的通用答案;谢谢!如果您发布实际答案,我会接受。

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


【解决方案1】:

前 c++11

T x = T();

在这里阅读 - link

T3 var3 = {};

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

source

【讨论】:

  • OP 知道这一点,但 T 需要通过可复制才能工作。
  • 这是我所知道的最佳答案,但并不完美。我想问有没有更好的。也就是说,您的链接上没有更好的答案这一事实表明可能没有更好的答案,所以我非常感谢您。 (我做了一些搜索,但没有找到。)
  • 不确定我刚刚找到的是否有帮助,我编辑了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 2013-10-04
  • 2016-02-02
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多