C++ 11:final 和 override 说明符
final
指定某个虚函数不能在派生类中被覆盖,或者某个类不能被派生。
在继承关系中“中途”终止派生类的重载
override
指定一个虚函数覆盖另一个虚函数。
避免重载函数名拼写错误,函数原型不匹配,重写了非虚函数
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include <iostream>using namespace std;class Base { virtual void Turing() = 0; virtual void Daaaaa() = 0; virtual void Va(int g) = 0; virtual void Z() const; virtual void Play() = 0; void Print();};class DerivedMid : public Base { void D(); ...
C++ 11:auto 和 decltype
auto
对于变量,指定要从它的初始化器自动推导出它的类型。
C++ 11 之前 auto 是用来存储类型指示符,而 C++ 11 之后是作为一个新的类型指示符来指示编译器,auto 声明变量的类型必须由编译器在编译期间推导而得
auto 并非是一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将 auto 替换为变量的实际类型。
decltype
检查实体的声明类型,或表达式的类型和值类别。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109#include <iostream>#include <vector>//using namespace std;// ...
C++ 11:default 和 delete
defalut
预置函数
显式预置的函数定义,只能用于特殊成员函数和比较运算符函数
特殊成员函数
一些成员函数是特殊的:在某些环境下,即使用户不定义编译器也会定义它们。它们是:
默认构造函数
复制构造函数
移动构造函数
复制赋值运算符
移动赋值运算符
析构函数
特殊成员函数以及比较运算符(C++20 起)是仅有的能被预置的函数,即使用 = default 替代函数体进行定义。
delete
弃置函数
如果使用特殊语法 = delete ;取代函数体,那么该函数被定义为弃置的(deleted)。任何弃置函数的使用都是非良构的(程序无法编译)。这包含调用,包括显式(以函数调用运算符)及隐式(对弃置的重载运算符、特殊成员函数、分配函数等的调用),构成指向弃置函数的指针或成员指针,甚至是在不求值表达式中使用弃置函数。但是可以隐式 ODR 使用刚好被弃置的非纯虚成员函数。
如果函数被重载,那么首先进行重载决议,且只有在选择了弃置函数时程序才非良构:
123456struct sometype{ void* operator new(std::size_t) = delet ...
C++ 11
auto and decltype(占位符与 decltype 说明符)
C++ 11:auto 和 decltype
defaulted and deleted functions(预置与弃置的函数)
C++ 11:default 和 delete
final and override(final 说明符与 override 说明符)
C++ 11:final 和 override 说明符
trailing return type(返回类型后置)
C++ 11:返回类型后置(trailing return type)
rvalue references(右值引用)
C++ 11:右值引用(rvalue references)
move constructors and move assignment operators(移动构造函数与移动赋值运算符)
C++ 11:移动构造函数(move constructors)
C++ 11:移动赋值运算符(move assignment operators)
scoped enums(有作用 ...
解决 GitHub 访问不了
访问不了 GitHub,提交代码到 GitHub 仓库也提交不了,这无疑是在我们学习编程的路上驻了一堵高墙!
1. 改 hosts
我们在浏览器输入 GitHub 的网址时,会向 DNS 服务器发送一个请求,获取到 GitHub 网站所在的服务器 IP 地址,从而进行访问。
就像你是一名快递员,在送快递前要先找中间人询问收件人的地址。而 DNS 就是这个告诉你目标地址的中间人,如果 DNS 告诉了你错误的地址、或者请求被拦截、再或者 DNS 挂了,都会导致你无法访问网站。
打开 IP 查询 https://www.ip138.com
先找到 hosts 文件的位置,不同操作系统,hosts 文件的存储位置也不同:
Windows 系统:C:\Windows\System32\drivers\etc\hosts
Linux 系统:/etc/hosts
Mac(苹果电脑)系统:/etc/hosts
使用管理员权限打开 hosts 文件,添加一行,将 xx 替换为你查询到的解析地址即可
1xx.xx.xx.xx www.github.com
刷新 DNS 缓存,需要以管理员权限启动命令 ...
Qt实战-获取 Windows 空闲时间
通过判断鼠标键盘的输入来获取 Windows 空闲时间
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include <QCoreApplication>#include <QDebug>#include <windows.h>#include <winuser.h>#include <sysinfoapi.h>#include <thread>void DoSomething(){ qDebug() << "start do..."; std::this_thread::sleep_for(std::chrono::seconds(10)); qDebug() << "end.";}void PrintLastInput(){ int ...
VS2019 编译调试火狐浏览器源码
官方提供的编译文档
注意:官方提供的编译文档会更新,以下方法可能不适用于最新的源码编译方式
在Windows上构建Firefox
Visual Studio项目
前期准备
安装 Visual Studio
安装 Rust
安装 MozillaBuild
安装Rust
启动shell
在安装完成MozillaBuild后启动start-shell.bat,以后的操作都将会在启动的shell中进行。
在线下载源码
在shell中打开到指定的目录
1>$ hg clone https://hg.mozilla.org/mozilla-central
如果遇到shell请求输入,一路 y 下去就行了
配置编译源码
$ mach bootstrap
Please choose the version of Firefox you want to build:
Firefox for Desktop Artifact Mode
Firefox for Desktop
GeckoView/Firefox for Android Artifact Mode
GeckoView ...