【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);
}
但是定义这么一个接受空指针的重载函数有什么实际作用呢?
没能找到有力的资料,有知道答案的请不吝赐教~
参考资料
END
微信公众号:马志峰的编程笔记
记录一名普通程序员的成长之路