【Json11源码阅读】04 问题解答,Part_2

问题1

class Json final {  

疑问

final是什么用途?

解题思路

继续昨天的第一个套路:找目录和“新特性”。很快就可以找到相关的内容

15.2.2 通过定义类为final来阻止继承 533
15.3 虚函数的override和final指示符 538

可以看出都是和类相关的内容,但是我们第七章还没有看,这里最好补充一下。

解答

总的来说,final既可以修饰类也可以修饰函数。

  • 被final修饰的类不能被继承
  • 被final修饰的函数不能被覆盖

final说明符出现在形参列表(包括任何const或引用修饰符)以及尾置返回类型之后。

参考资料

c++ primer 533, 538


问题2

Json() noexcept;  

疑问

函数后面加noexcept什么语法?

解题思路

昨天已经解答

解答

参考资料


问题3

Json(std::nullptr_t) noexcept;  

疑问

这个std::nullptr_t是什么东西?
为什么使用这个类型?

解题思路

搜索cppreference

解答

这个东西看上去挺神秘的,但是看了它的声明之后就明白是咋回事了

typedef decltype(nullptr) nullptr_t;

它表示的是指针字面值常量nullptr的类型,它本身不是指针

定义在头文件cstddef中,也是c++11之后才有的内容。那么它有什么用呢?

网站上给出的例子很好的说明了它的用途:如果函数有多个重载,接受不同类型的指针作为参数,那么也可以定义一个接受空指针的重载函数

void f(int *pi);
void f(double *pd);
void f(std::nullptr_t nullp);

int main()
{
    int* pi; 
    double* pd;
    
    f(pi);
    f(pd);
    f(nullptr);
}

但是定义这么一个接受空指针的重载函数有什么实际作用呢?

没能找到有力的资料,有知道答案的请不吝赐教~

参考资料

http://en.cppreference.com/w/cpp/types/nullptr_t


END


微信公众号:马志峰的编程笔记

记录一名普通程序员的成长之路

posted @ 2017-04-17 08:14  马志峰  阅读(261)  评论(0编辑  收藏  举报