我想了解下面的代码.实际的类型是UnspecifiedBoolType什么?
我糊涂了.有谁可以向我解释一下?提前致谢!
template <typename T>
class MyOptional
{
public:
MyOptional() : valueIsSet(false) {}
MyOptional(const T& value) : valueIsSet(true), value(value) {}
// Conversion to bool. This is a variant of the "safe bool idiom".
typedef T MyOptional<T>::*UnspecifiedBoolType;
inline operator UnspecifiedBoolType() const;
...
private:
bool valueIsSet;
T value;
};
...
template<typename T>
MyOptional<T>::operator MyOptional<T>::UnspecifiedBoolType() const
{
return valueIsSet ? &MyOptional<T>::value : 0;
}
Run Code Online (Sandbox Code Playgroud)
正如你的代码中的评论所说,这是" 安全的bool成语"."未指定的bool类型"是一种可以在这样的条件表达式中使用的类型:
MyOptional<int> myop;
// ...
if (myop) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
人们在C++中这样做的原因是为了防止bool通过类的转换运算符将意外转换为其他类型.例如,如果没有安全的bool习语,你可以这样做:
MyOptional<int> myop;
// ...
int bad = myop; // bad is now zero or one, not the "value" of myop
Run Code Online (Sandbox Code Playgroud)
最后,请注意,在C++ 11中,我们不再需要像这样的模糊代码,因为现在我们有一个语言功能,可以让我们写这个:
explicit operator bool();
Run Code Online (Sandbox Code Playgroud)