Rom*_*man 5 c++ constructor pointers default-value
我试着理解这段代码(从这里开始):
template <class T> class auto_ptr
{
T* ptr;
public:
explicit auto_ptr(T* p = 0) : ptr(p) {}
~auto_ptr() {delete ptr;}
T& operator*() {return *ptr;}
T* operator->() {return ptr;}
// ...
};
Run Code Online (Sandbox Code Playgroud)
我对理解这行代码有疑问:explicit auto_ptr(T* p = 0) : ptr(p) {}.
据我所知,通过这一行,我们尝试定义一个具有一个pointer-to-object-of-T-class类型参数的构造函数.然后我们有= 0.那是什么?它是默认值吗?但是如何0成为指针的默认值(指针应该将地址作为值,而不是整数).
NPE*_*NPE 10
是的,= 0是默认值.对于指针参数,它与...相同= NULL.
引用Stroustrup:
我应该使用
NULL或0?在C++中,定义
NULL是0,所以只有美学差异.我更喜欢避免使用宏,所以我使用了0.另一个问题NULL是人们有时会错误地认为它0与整数不同和/或不是整数.在预标准代码中,NULL/有时被定义为不适合的东西,因此必须/必须避免.这些日子不太常见.如果必须命名空指针,请调用它
nullptr; 这就是它在C++ 11中所称的内容.然后,nullptr将是一个关键字.
空指针常量的正式定义如下(强调我的):
4.10指针转换[conv.ptr]
1 空指针常量是整数类型的整数常量表达式(5.19)prvalue,其计算结果为零 或类型为std :: nullptr_t的prvalue.空指针常量可以转换为指针类型; 结果是该类型的空指针值,并且可以与指向对象的指针或指向函数类型的指针的每个其他值区分开来.这种转换称为空指针转换.
NULL 被定义为一个这样的常数:
18.2类型[support.types]
3宏
NULL是本国际标准(4.10)中一个实现定义的C++空指针常量.192192)可能去网络nitions包括
0和0L,但不会(void*)0.