我试图理解下面的代码。 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;
}
最佳答案
正如代码中的注释所说,这是“safe bool idiom”。 “未指定的 bool 类型”是一种可以在条件表达式中使用的类型,如下所示:
MyOptional<int> myop;
// ...
if (myop) {
// ...
}
人们在 C++ 中这样做的原因是为了防止通过类的转换运算符从 bool
意外转换为其他类型。例如,如果没有 safe bool 习语,你可以这样做:
MyOptional<int> myop;
// ...
int bad = myop; // bad is now zero or one, not the "value" of myop
最后,请注意,在 C++11 中,我们不再需要像这样晦涩难懂的代码,因为现在我们有了一种语言功能,可以让我们这样写:
explicit operator bool();
关于c++ - UnspecifiedBoolType 的类型?关于typedef、成员函数指针和转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28424356/