【发布时间】: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:boost.org/doc/libs/1_60_0/libs/utility/value_init.htm
-
Boost 答案可能是最好的通用答案;谢谢!如果您发布实际答案,我会接受。
标签: c++ c++03 c++98 most-vexing-parse