… Read More这里谈一下个人的学习建议. 首先阅读官方的入门教程, 看完这一部分,对于一个熟练的C++程序员,应该可以凑合写出可堪一用的代码了. 然后是Python in a Nutshell 3rd第七章之前的内容(不含第七章),这一部分看完, 你就能基本了解Python的运行机制, 写出质量合格的代码了(但可能不够Pythonic).
上面两步完成后, 对一个熟悉C++的程序员而言, 基本任何Level的Python资料都可以看了. 如果偏应用,你可以继续看Python in a
[Cpp基础][09]C++11多线程编程基础
Ethash with cpp
C++模板编程简述
模板作为一个C++中的一个高级特性,广泛应用于各种场合,以尽可能弥补自身作为编译语言的动态能力.然而,除非必要,模板应当尽可能的简单,避免本末倒置.
模板使用基础
- 模板特性是编译器和链接器相互配合实现的.这可以辅助我们理解它的特性.
- 编译期实例化时
- 模板类型参数通常得是完全类型.
- 模板非类型参数必须是constexpr
- 在模板编程中,编译器对
T::foo
型语法分析可能会有歧义,例如,T::vl * p
这样的语句可能是使用T
的静态成员做乘法,也可能是创建一个T::vl *
型的指针.- 默认情况下,编译器认为给出的所有名字都是变量/函数,而非类型.
- 此时需要
C++ OOP编程综述
嵌套类和局部类
- 定义在类X内的类Y称为嵌套类,它就是一个普通类,只不过使用的作用域被限制了.
- 定义在函数内的类Y称为局部类,这种类限制很多,主要用于在语言层面支持Lambda,实践中基本不用.
struct和class的内存布局
- C++的struct和class实例大小不会为0,即便它内部没有任何成员函数或成员变量.主要是因为编译器总是需要为实例分配内存,不占内存的实例是不存在的
- 数据成员全为全public,无构造函数,无类内初始值,不使用继承及virtual的类,称为聚合类.聚合类可以通过
{}
进行逐成员初始化 - 如果需要把sturct或class对象通过C风格直接从内存层面管理(如memcpy),那么就必须要求它的内存布局是平凡的(标准的),这写类型称为POD. 标准库中,is_pod
::value可以判断其是否是可以直接操作的 - 如果类内存在多个
public
或private
声明,则编译器可能重排该类的内存布局(移动部分对象),这将导致成员排布和程序员的预期产生差异. - 对齐方法一般是由编译选项或编译指示决定的.
OOP基础特性:
- 如果没有特别说明,就永远只使用
public继承
C++特性”异常”
异常
- C++内所说的异常是指:可以预见的非正常状况,例如输入的指针为空;而非不可预见的问题,例如突然停电,或者突然被用户把进程kill掉.
- 异常特性会导致程序的执行流程不可控,且往往对OS及runtime有一定的要求(可移植性差),所以没有特殊需求时,不应当使用这个特性.
throw-try-catch
是异常系统的典型三个环节.- throw出的可以是任意对象,只要catch处声明的对象可以用throw的对象初始化即可.习惯上我们会专门设计一个类,因为自定义类可以承载更多的信息
- 异常catch中的形参可以使用引用,以使用多态机制
- 异常抛出后寻找catch的过程称为栈展开,被展开的函数栈内所有局部对象都将被销毁,因此抛出的异常对象必须不依赖局部对象.
- 标准库内提供了以
exception
为基类的约10种异常,我们可以使用这个类,也可以自定义类,该类的const char * what()
成员用于给用户提供信息.- catch内置异常时,必须使用引用,从而保证能使用多态机制.
- 构造函数内可以throw异常;析构函数若抛出异常,则会直接ternimate.
重载运算符
重载运算符
规定
- 赋值,取下标,调用,箭头,类型转换,这些运算符只能作为成员函数.
- 用户重载的
&&
与||
不会进行短路求值.
习惯
- 重载主要分为全局重载和类内重载,一般而言,二元运算都应该在全局重载(顺序问题).
- 改变对象状态的运算符一般应当设为成员函数,拥有对称性的运算符一般应在类外重载.
- 一种优秀的风格是,在类内定义所有一元运算符,这些运算符可以直接修改对象.在类外定义所有的二元运算符,二元运算符通过调用一元运算符来实现功能.
- 从技术层面说,重载运算符的参数可以是指针类型的,但是这一般与我们使用语言的习惯不符,所以形参类型最好只是
T
或T&
,而不要是指针. - 定义有关联的重载运算符时一定要考虑兼容性,例如
a<b
为假,
Google NCR ZH
因为一些众所周知的原因,我们不希望使用中文版的谷歌,但是往往又希望中文界面.以下面的链接作为查询网址即可
https://www.google.com/ncr#hl=zh-CN&q=%s
… Read More 从宿主访问Ubuntu虚拟机的文件
背景: 开发中希望能从宿主直接访问虚拟机的文件,例如用office打开word,用 source insight 阅读代码等。
-
虚拟机为16.04 ,宿主为Windows 10 1803,samba试了很多次,就是不行。
-
ftp方案:
- sudo apt-get install vsftpd
- sudo vi /etc/vsftpd.conf,并在末尾粘贴以下内容
anonymous_enable=YES
anon_root= abs_path_to_dir
… Read More [Cpp基础] [08] 动态内存与智能指针
动态内存与智能指针
new+delete
new delete
是C++中的两个主要的表达式.new
相当于C的malloc() + T()
,delete
相当于C
的free() + ~T()
.构造和析构总是会被调用.operator