const // It is a const object...
class nullptr_t
{
public:
template<class T>
inline operator T*() const // convertible to any type of null non-member pointer...
{ return 0; }
template<class C, class T>
inline operator T C::*() const // or any type of null member pointer...
{ return 0; }
private:
void operator&() const; // Can't take address of nullptr
} nullptr = {};
operator T*() const
和operator T C::*() const
已在类中定义,因此可以自动内联。那么,为什么要再次添加inline
呢? void operator&() const;
,而不是void operator&() = delete
? nullptr = {};
是什么意思? 答案 0 :(得分:17)
添加额外的内联是一种风格问题。该说明符与链接和ODR违规有关,而不是实际内联。所有内联成员函数定义和模板成员函数通常都具有该指定符隐式。我认为Scott Meyers是出于教学原因而在那里添加的。
有效的C ++最初是为C ++ 03编写的。当时没有= delete
。当时你可以做的就是声明但没有定义一个函数。
这是聚合初始化。即使在C ++ 03中,nullptr_t
的这种实现也可以初始化。它创建了nullptr
的值。由于nullptr_t
没有用户提供的默认c'tor,因此需要。