【发布时间】:2015-03-18 08:34:18
【问题描述】:
假设我有以下 C++11 代码:
template<typename T>
const T& GetValueOrDefault(T* pPtr) const
{
static const T oDefaultInstance {}; // MSVC error here.
return pPtr ? *pPtr : oDefaultInstance;
}
我面临的问题是它在 MSVC 2012 中无效:MSVC 2012 不支持统一初始化语法。
为确保您完全理解我的意图,我提供了发生错误的行的此行为描述:
-
如果
T是对象类型,则调用默认构造函数。1.1。如果
T是一个类,那么应该就地构造变量,即语句应该支持不可移动和/或不可复制的类(不依赖于 RVO)。 如果
T是标量类型,则在初始化时使用默认值(零)。
如果我强制编译器将其解释为带初始化的变量定义,则可以将此类行为归档到下一行:
static const T oDefaultInstance();
我的问题是:如何在 C++2003(或至少在 MSVC 2012)中编写上面的行以强制(对我而言)正确解析?
【问题讨论】:
-
静态变量已经被零初始化,然后是默认初始化,根本没有任何括号