主要整理了N多年前(2010年)学习C++的时候开始总结的知识点,好长时间不写C++代码了,现在LLM量化和推理需要重新学习C++编程,看来出来混迟早要还的。

1.const_cast <new_type> (expression)[1]

解析:const_cast转换符用来移除变量的const或volatile限定符。如下所示:

(1)常量指针被转化成非常量指针,并且仍然指向原来的对象。比如,const A *pca1 = new A; A *pa2 = const_cast<A*>(pca1);

(2)常量引用被转换成非常量引用,并且仍然指向原来的对象。比如,const A &a1 = a0; A a2 = const_cast<A&>(a1);

(3)常量对象被转换成非常量对象(错误)。 比如,const A ca; A a = const_cast<A>(ca);(错误)

(4)添加const属性。比如,const int *k = const_cast<const int*>(j);和const int *m = j;

  说明:使用const_cast去掉const属性,其实并不是真的改变原类类型(或基本类型)的const属性,它只是又提供了一个接口(指针或引用),可以通过这个接口来改变类型的值。使用const_case添加const属性,也是提供了一个接口,来不让修改其值。

2.VS 2013和Boost 1.6.2[2]

解析:

(1)附加包含目录:D:\boost_1_62_0

(2)附加库目录:D:\boost_1_62_0\stage\lib

在VS 2013工程中,添加C/C++工程中外部头文件及库的基本步骤,如下所示:[4]

(1)添加工程的头文件目录:工程 --> 属性 --> 配置属性 --> C/C++ --> 常规 --> 附加包含目录:加上头文件存放目录。

(2)添加文件引用的lib静态库路径:工程 --> 属性 --> 配置属性 --> 链接器 --> 常规 --> 附加库目录:加上lib文件存放目录。

(3)添加工程引用的lib文件名:工程 --> 属性 --> 配置属性 --> 链接器 --> 输入 --> 附加依赖项:加上lib文件名。

(4)添加工程引用的dll动态库:把引用的dll放到工程的可执行文件所在的目录下。

说明:b2.exe、bjam.exe这两个exe的作用是一样的,只不过bjam.exe是老版本,b2是bjam的升级版本。

3.VS 2013和Boost.Python [3][5]

解析:Boost::Python库是Python和C++相互交互的框架,它是对Python/C API的包装,可以在Python中调用C++的类和方法,也可以让C++调用Python的类和方法。Python是一个动态类型的语言,C++是一个静态类型的语言,对于Python中的变量类型,Boost.Python都有相应的类对应。

(1)编译Boost.Python

执行命令bjam --with-python link=shared runtime-link=shared address-model=64,在目录D:\boost_1_62_0\stage\lib下面生成boost_python-vc120-mt-1_62.dll,boost_python-vc120-mt-1_62.lib,boost_python-vc120-mt-gd-1_62.dll,boost_python-vc120-mt-gd-1_62.lib四个文件。如果报错fatal error C1001:编译器中发生内部错误,那么将VS 2013升级到VS 2013 Update 5。[7]

(2)使用VS 2013生成dll文件

使用VS 2013新建一个Win32 DLL项目,然后设置项目属性:包含目录D:\boost_1_62_0,D:\boost_1_62_0\libs,D:\Program Files\Anaconda2\include,库目录D:\boost_1_62_0\stage\lib,D:\Program Files\Anaconda2\libs,并且不启用最小重新生成,不使用预编译头。

(3)Python调用C++

将生成的dll文件改为pyd文件,并将boost_python-vc120-mt-gd-1_62.dll和pyd文件复制到Python项目的根目录。[8][9]

  说明:通过Boost.Python模块(也是对Python/C API的封装),C++可为Python编写扩展模块。通过Python/C API,Python可为C++提供脚本接口。[10]

4.chrono、ratio和ctime等头文件 [6]

解析:

(1)#include :日期和时间。

(2)#include :日期和时间。

(3)#include :比例关系。

(4)#include :运行时类型信息(RTTI)。

5.两种遍历host_vector方式

解析:

(1)常规方式

  1. for (int i = 0; i < h_vec.size(); i++) {
     cout << h_vec[i] << endl;
    }

(2)迭代器方式

  1. for (host_vector<int>::iterator i = h_vec.begin(); i != h_vec.end(); i++)
    {
     cout << *<< endl;
    }

6.volatile关键字

解析:volatile关键字确保本条指令不会因编译器的优化而省略,而且要求每次直接读值。

7.extern "C"

解析:extern "C"的主要作用是为了能够正确实现C++代码调用其它C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。

8.C++ 11中auto功能[11]

解析:自动类型推断;返回值占位。

9.assert宏

解析:assert()是宏,而不是函数。在C的#include<assert.h>头文件中,其作用是如果它的条件返回错误,则终止程序执行。如下所示:

  1. #include <stdio.h>      
    #include <assert.h>     
     
    void print_number(int* myInt) {
     assert(myInt != NULL);
     printf("%d\n", *myInt);
    }
     
    int main()
    {
     int a = 10;
     int * b = NULL;
     int * c = NULL;
     
     b = &a;
     
     print_number(b);
     print_number(c);
     
     return 0;
    }

10.inline关键字

解析:关键字inline必须与函数定义体放在一起才能使函数成为内联函数,仅将inline放在函数声明前面不起任何作用。不宜使用内联函数,如下所示:

(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。

(2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。

11.exit()函数

解析:exit(1)是异常退出,exit(0)是正常退出。

12.C++三法则

解析:如果类定义下列其中一个函数,那么也需要其它两个函数,如下所示:

(1)析构函数(Destructor)

(2)复制构造函数(copy constructor)

(3)复制赋值运算符(copy assignment operator)

13.POD类型

解析:POD是Plain Old Data的缩写,它是一个struct或者类,且不包含构造函数、析构函数以及虚函数。

14.虚函数,纯虚函数,虚基类与虚继承

解析:

(1)虚函数:定义一个函数为虚函数,不代表函数为不被实现的函数。定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。

(2)纯虚函数:定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

15.std::shared_ptr

解析:std::shared_ptr定义于头文件 中,template< class T > class shared_ptr; std::shared_ptr是通过指针保持某个对象的共享拥有权的智能指针。若干个shared_ptr对象可以拥有同一个对象;最后一个指向该对象的shared_ptr被销毁或重置时,该对象被销毁。销毁该对象时使用的是delete表达式或者是在构造shared_ptr时传入的自定义删除器(deleter)。shared_ptr也可以不拥有对象,称作空(empty)。shared_ptr满足CopyConstructible和CopyAssignable的要求。

16.explicit specifier

解析:在大部分情况中,隐式转换却容易导致错误(不是语法错误,编译器不会报错)。通过将构造函数声明为explicit(显式)的方式可以抑制隐式转换,也就是explicit构造函数必须显式调用。如下所示:

  1. struct A {
        A ( int ) {}
        operator int() const { return 0; }
    };
     
    struct B {
        explicit B(int) {}
        explicit operator int() const { return 0; }
    };
     
    int main() {
        // A is has no explicit ctor / conversion, everything is fine
        A a1 = 1;
        A a2 ( 2 );
        A a3 { 3 };
        int na1 = a1;
        int na2 = static_cast<int>( a1 );
     
        B b1 = 1; // Error: implicit conversion from int to B
        B b2 ( 2 ); // OK: explicit constructor call
        B b3 { 3 }; // OK: explicit constructor call
        int nb1 = b2; // Error: implicit conversion from B to int
        int nb2 = static_cast<int>( b2 ); // OK: explicit cast
    }

说明:explicit class_name ( params );explicit operator type () (C++11起)。

17.boost::mutex

解析:Boost线程库提供了6种互斥体类型:boost::mutex;boost::try_mutex;boost::timed_mutex;boost::recursive_mutex;boost::recursive_try_mutex;boost::recursive_timed_mutex。boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。如下所示:

(1)mutex对象类:mutex类主要有两种:boost::mutex,boost::shared_mutex,其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,还有shared_lock和shared_unlock方法。因此,boost::mutex为独占互斥类,boost::shared_mutex为共享互斥类。

(2)lock模板类:boost::unique_lock,boost::shared_lock,其中unique_lock为独占锁,shared_lock为共享锁。unique_lock中的T可为mutex类中的任意一种,如果为shared_mutex,那么boost::unique_lock类的对象构造函数构造时,会自动调用shared_mutex的shared_lock方法,析构函数里会自动调用shared_mutex的shared_unlock方法。如果boost:: unique_lock,则分别自动调用lock和unlock方法。boost::shared_lock中的T只能是shared_mutex类。

18.NMake Makefiles与MinGW Makefiles区别

解析:-G "MinGW Makefiles"这个参数的意思是生成MinGW的Makefile,最终生成的编译目标(Makefile)是针对MinGW编译器的。如果编译器是VS,那么使用"NMake Makefiles"。

19.Boost并发编程[12]

解析:

(1)Interprocess (IPC)库:用于实现共享内存、内存映射的 I/O 和消息队列;

(2)Thread库:用于实现可移植的多线程;

(3)Message Passing Interface (MPI):库用于分布式计算中的消息传递;

(4)Asio库:用于使用套接字和其它低层功能实现可移植的连网功能。

20.CMake常用命令

解析:

(1)set(Foo a b c):设置变量Foo。

(2)add_exectuable:告诉工程生成一个可执行文件。

(3)add_library:告诉工程生成一个库文件。

(4)include_directories:头文件路径。

(5)link_directories:库文件路径。

(6)find_package(XXX):调用FindXXX.cmake模块。

(7)add_definitions:添加编译参数。

(8)target_link_libraries:添加链接库。

(9)CMAKE_BUILD_TYPE:SET(CMAKE_BUILD_TYPE Debug|Release)。

(10)编译器参数:CMAKE_C_FLAGS;CMAKE_CXX_FLAGS。

(11)_FOUND:如果找到了name,被设置为1,否则不设置。

(12)_INCLUDE_DIRS:被设置成name安装头文件和依赖头文件的目录。

(13)_LIBRARIES:被设置成所建立和安装的name库的文件名。

(14)_LIBRARY_DIRS:被设置成name库的第三方依赖文件所在的目录。

(15)_VERSION:所找到的name的版本。

(16)_COMPONENTS:列出所有可用组件。

(17)_DEFINITIONS:列出所需要的预处理器定义和编译器标志。

(18)获得一个目录下所有源文件(不包含头文件):aux_source_directory(<dir> <variable>)。

(19)设定依赖的cmake版本:cmake_minimum_required(VERSION 2.6)。

(20)${projectname_SOURCE_DIR}:表示根源文件目录。

(21)${projectname _BINARY_DIR}:表示根二进制文件目录。

(22)打印make输出:make VERBOSE=1。

(23)add_compile_options:添加的编译选项是针对所有编译器的。

(24)executable_output_path:指定可执行文件存放的路径。

(25)library_output_path:指定库文件存放的路径。

(26)cmake_current_source_dir:指的是当前处理的CMakeLists.txt所在的路径。

(27)cmake_current_binary_dir:如果是out-of-source编译,指的是target编译目录。

(28)cmake_current_list_file:输出调用这个变量的CMakeLists.txt完整路径。

(29)cmake_current_list_line:输出这个变量所在的行。

(30)cmake_module_path:定义cmake模块所在的路径。

(31)cmake调用环境变量:使用$ENV{NAME}指令调用系统环境变量。

(32)UNIX:在所有的类UNIX平台为TRUE,包括OS X和cygwin。

(33)WIN32:在所有的win32平台为TRUE,包括cygwin。

(34)build_shared_libs:控制默认的库编译方式。

21.#include

解析:io代表输入输出,manip是manipulator[操纵器]的缩写。它是I/O流控制头文件,就像C里面的格式化输出一样。

22.#define WIN32_LEAN_AND_MEAN

解析:包含<windows.h>时去除一些头文件的包含,加快编译速度。

23.#define NOMINMAX

解析:为了禁用Visual C++中的min/max宏定义,可以在包含<windows.h>头文件之前加上#define NOMINMAX。

24.标准库bitset对象上的操作

解析:

[1]b.any():b中是否存在置为1的二进制位。

[2]b.none():b中不存在置为1的二进制位。

[3]b.count():b中置为1的二进制位的个数。

[4]b.size():b中二进制位的个数。

[5]b[pos]:访问b中在pos处的二进制位。

[6]b.test(pos):b中在pos处的二进制位是否为1。

[7]b.set():把b中所有二进制位都置为1。

[8]b.set(pos):把b中在pos处的二进制位置为1。

[9]b.reset():把b中所有二进制位都置为0。

[10]b.reset(pos):把b中在pos处的二进制位置为0。

[11]b.flip():把b中所有二进制位逐位取反。

[12]b.flip(pos):把b中在pos处的二进制位取反。

[13]b.to_ulong:把b中同样的二进制位返回一个unsigned long值。

[14]os << b:把b中的位集输出到os流。

25.GCC参数

解析:

  1. [1]static:编译静态库。 
    [2]shared:编译动态库。  
    [3]w:不生成任何警告信息。       
    [4]Wall:生成所有警告信息。   
    [5]-[小写l]指定要链接的库。  
    [6]-[大写i]指定头文件目录。  
    [7]-[大写l]指定库目录。  

26.Binutils

解析:GNU Binutils [Binary Utilities],即GNU二进制工具集。

27.itoa函数[#include <stdlib.h>]

解析:函数原型char *itoa( int value, char *string, int radix);(把一个整数转换为字符串),如下所示:

[1]value:欲转换的数据。

[2]string:目标字符串的地址。

[3]radix:转换后的进制数,比如16进制等。

  相关函数,如下所示:

[1]char *ultoa(unsigned long value, char *string, int radix) :将无符号整型数value转换成字符串并返回该字符串。

[2]char *ltoa(long value, char *string, int radix) :将长整型数value转换成字符串并返回该字符串。

[3]char *itoa(int value, char *string, int radix):将整数value转换成字串存入string,radix为转换时所用基数。

[4]double atof(char *nptr) :将字符串nptr转换成双精度数,并返回这个数,错误返回0。  
[5]int atoi(char *nptr) :将字符串nptr转换成整型数,并返回这个数,错误返回0。

[6]long atol(char *nptr) :将字符串nptr转换成长整型数,并返回这个数,错误返回0。  
[7]double strtod(char *str, char **endptr) :将字符串str转换成双精度数,并返回这个数。

[8]long strtol(char *str, char **endptr, int base) :将字符串str转换成长整型数,并返回这个数。

28.Tcl/Tk脚本语言

解析:Tcl是"工具控制语言[Tool Control Language]"的缩写。Tk是Tcl"图形工具箱"的扩展,它提供各种标准的GUI接口项,以利于迅速进行高级应用程序开发。

29.LLVM

解析:LLVM是构架编译器[compiler]的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间[compile-time]、链接时间[link-time]、运行时间[run-time]以及空闲时间[idle-time],对开发者保持开放,并兼容已有脚本。

30.CC编译器

解析:在Linux下,cc通常是一个符号连接,指向gcc。

31.CMake安装

解析:

[1]sudo apt-get install cmake

[2]sudo apt-get install cmake-qt-gui

[3]使用命令cmake-gui在终端打开界面

32.静态成员函数

解析:静态成员函数没有this指针,只能访问静态成员数据、其它静态成员函数和类外部的其它函数。

33.C++继承类型

解析:

[1]公有继承[public]:当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。

[2]保护继承[protected]: 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。

[3]私有继承[private]:当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。

34.可重载运算符

解析:

[1]双目算术运算符:+ (加),-(减),*(乘),/(除),% (取模)

[2]关系运算符:==(等于),!= (不等于),< (小于),> (大于>,<=(小于等于),>=(大于等于)

[3]逻辑运算符:||(逻辑或),&&(逻辑与),!(逻辑非)

[4]单目运算符:+ (正),-(负),*(指针),&(取地址)

[5]自增自减运算符:++(自增),--(自减)

[6]位运算符:| (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)

[7]赋值运算符:=, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=

[8]空间申请与释放:new, delete, new[] , delete[]

[9]其它运算符:()(函数调用),->(成员访问),,(逗号),

35.不可重载运算符

解析:

[1].:成员访问运算符

[2].*和->*:成员指针访问运算符

[3]:::域运算符

[4]sizeof:长度运算符

[5]?::条件运算符

[6]#:预处理符号

说明:运算重载符不可以改变语法结构,不可以改变操作数的个数,不可以改变优先级,不可以改变结合性。

36.虚函数

解析:虚函数是在基类中使用关键字virtual声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。

37.纯虚函数

解析:virtual int area() = 0;其中,=0告诉编译器,函数没有主体,上面的虚函数是纯虚函数。

38.使用CLion进行Boost编程

解析:

[1]./booststrap.sh

[2]sudo ./b2 install

说明:编译好的头文件位于/usr/local/include/boost,库路径位于/usr/local/lib。

39.ADD_EXECUTABLE(CRNode ${SRC_LIST})

解析:定义了这个工程会生成一个文件名为CRNode的可执行文件,相关的源文件是SRC_LIST中定义的源文件列表。需要注意的是,这里的CRNode和之前的项目名称没有任何关系,可以任意定义。

40.TARGET_LINK_LIBRARIES(CRNode log4cpp thrift)

解析:在指定链接目标文件的时候需要链接的外部库,其效果类似gcc的编译参数-l,可以解决外部库的依赖问题。

41.C类库

解析:

  1. [1]<cassert> (assert.h):Diagnostics Library (header)
    [2]<cctype> (ctype.h):Character handling functions (header)
    [3]<cerrno> (errno.h):Errors (header)
    [4]<cfenv> (fenv.h):Floating-point environment (header)
    [5]<cfloat> (float.h):Characteristics of floating-point types (header)
    [6]<cinttypes> (inttypes.h):C integer types (header)
    [7]<ciso646> (iso646.h):ISO 646 Alternative operator spellings (header)
    [8]<climits> (limits.h):Sizes of integral types (header)
    [9]<clocale> (locale.h):C localization library (header)
    [10]<cmath> (math.h):C numerics library (header)
    [11]<csetjmp> (setjmp.h):Non local jumps (header)
    [12]<csignal> (signal.h):C library to handle signals (header)
    [13]<cstdarg> (stdarg.h):Variable arguments handling (header)
    [14]<cstdbool> (stdbool.h):Boolean type (header)
    [15]<cstddef> (stddef.h):Standard definitions (header)
    [16]<cstdint> (stdint.h):Integer types (header)
    [17]<cstdio> (stdio.h):C library to perform Input/Output operations (header)
    [18]<cstdlib> (stdlib.h):Standard General Utilities Library (header)
    [19]<cstring> (string.h):Strings (header)
    [20]<ctgmath> (tgmath.h):Type-generic math (header)
    [21]<ctime> (time.h):Time Library (header)
    [22]<cuchar> (uchar.h):Unicode characters (header)
    [23]<cwchar> (wchar.h):Wide characters (header)
    [24]<cwctype> (wctype.h):Wide character type (header)

42.C++容器类库

解析:

  1. [1]<array>:Array header (header)
    [2]<bitset>:Bitset header (header)
    [3]<deque>:Deque header (header)
    [4]<forward_list>:Forward list (header)
    [5]<list>:List header (header)
    [6]<map>:Map header (header)
    [7]<queue>:Queue header (header)
    [8]<set>:Set header (header)
    [9]<stack>:Stack header (header)
    [10]<unordered_map>:Unordered map header (header)
    [11]<unordered_set>:Unordered set header (header)
    [12]<vector>:Vector header (header)

43.C++输入/输出流类库

解析:

44.Atomics and threading library

解析:

  1. [1]<atomic>:Atomic (header)
    [2]<condition_variable>:Condition variable (header)
    [3]<future>:Future (header)
    [4]<mutex>:Mutex (header)
    [5]<thread>:Thread (header)

45.Miscellaneous headers

解析:

  1. [1]<algorithm>:Standard Template Library: Algorithms (library )
    [2]<chrono>:Time library (header)
    [3]<codecvt>:Unicode conversion facets (header)
    [4]<complex>:Complex numbers library (header)
    [5]<exception>:Standard exceptions (header)
    [6]<functional>:Function objects (header)
    [7]<initializer_list>:Initializer list (header)
    [8]<iterator>:Iterator definitions (header)
    [9]<limits>:Numeric limits (header)
    [10]<locale>:Localization library (header)
    [11]<memory>:Memory elements (header)
    [12]<new>:Dynamic memory (header)
    [13]<numeric>:Generalized numeric operations (header)
    [14]<random>:Random (header)
    [15]<ratio>:Ratio header (header)
    [16]<regex>:Regular Expressions (header)
    [17]<stdexcept>:Exception classes (header)
    [18]<string>:Strings (header)
    [19]<system_error>:System errors (header)
    [20]<tuple>:Tuple library (header)
    [21]<typeindex>:Type index (header)
    [22]<typeinfo>:Type information (header)
    [23]<type_traits>:type_traits (header)
    [24]<utility>:Utility components (header)
    [25]<valarray>:Library for arrays of numeric values (header)

46.malloc,free,calloc,realloc用法

解析:

[1]void* malloc(size_t size);:该函数与类型无关,向内存申请一块连续可用的空间,并返回指向这块空间的指针。

[2]void free (void *ptr);:指针指向申请出来的起始地址。

[3]void *calloc (size_t num,size_t size);:用来动态分配内存。

[4]void realloc(void ptr,size_t size );:对动态开辟内存大小的调整。

47.chrono库

解析:chrono库主要包含了三种类型:时间间隔Duration、时钟Clocks和时间点Timepoint。

48.C++ auto原理

解析:auto的原理就是根据后面的值,来自己推测前面的类型是什么。

49.MinGW

解析:MinGW是让Windows用户可以用上GNU工具。

50.Cygwin

解析:Cygwin提供完整的类Unix环境。

参考文献:

[1]C++类型转换详解const_cast:http://blog.csdn.net/lwbeyond/article/details/6213382

[2]在VS2013中安装配置boost_1_58_0库:http://blog.csdn.net/a249900679/article/details/50961852

[3]Boost.Python初级教程:http://blog.csdn.net/lainegates/article/details/8008414

[4]VC包含目录、附加依赖项、库目录及具体设置:http://www.cnblogs.com/MuyouSome/p/3380134.html

[5]Boost.Python:http://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/index.html

[6]C++的chrono、ratio和ctime等头文件:http://lib.csdn.net/article/operatingsystem/19036

[7]Boost安装出错,遇到“编译器中发生内部错误”的解决方法:http://blog.csdn.net/alpine_climbing/article/details/52621528

[8]VS2013 + Python + Boost.Python实现Python调用C++方法:http://evanstone.blog.51cto.com/9615170/1583366

[9]基于VS2015 X64的Boost.Python环境搭建:http://m.blog.csdn.net/article/details?id=52014741

[10]Python/C API Reference Manual:https://docs.python.org/2.7/c-api/index.html

[11]C++11新特性auto的使用:http://blog.csdn.net/huang_xw/article/details/8760403

[12]使用Boost库进行并发编程:http://www.ibm.com/developerworks/cn/aix/library/au-concurrent_boost/

[13] #define NOMINMAX:http://blog.163.com/fleeting_ash/blog/static/663410862009310113424930/

[14] 编译器cc、gcc、g++、CC的区别:https://www.cnblogs.com/52php/p/5681725.html

Boost程序库完全开发指南:1.2-C++基础知识点梳理的更多相关文章

  1. Boost程序库完全开发指南——深入C++“准”标准库(第3版)

    内容简介  · · · · · · Boost 是一个功能强大.构造精巧.跨平台.开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉. Boost 由C++标准委员会部分成员所设立的Bo ...

  2. boost------signals2的使用2(Boost程序库完全开发指南)读书笔记

    1.应用于观察者模式 本小节将使用signals2开发一个完整的观察者模式示例程序,用来演示信号/插槽的用法.这个程序将模拟一个日常生活场景:客人按门铃,门铃响,护士开门,婴儿哭闹. Ring.h: ...

  3. boost------function的使用(Boost程序库完全开发指南)读书笔记

    function是一个函数对象的“容器”,概念上像是c/c++中函数指针类型的泛化,是一种“智能函数指针”.它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象. 因此, ...

  4. boost------asio库的使用1(Boost程序库完全开发指南)读书笔记

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio ...

  5. boost------asio库的使用2(Boost程序库完全开发指南)读书笔记

    网络通信 asio库支持TCP.UDP.ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好地封装了原始的Berkeley Socket Api,展现 ...

  6. boost------bind的使用(Boost程序库完全开发指南)读书笔记

    bind是c++98标准库中函数适配器bind1st/bind2nd的泛化和增强,可以适配任意的可调用类型,包括函数指针.函数引用.成员函数指针和函数对象. 1.工作原理 bind并不是一个单独的类或 ...

  7. [转] boost------ref的使用(Boost程序库完全开发指南)读书笔记

    http://blog.csdn.net/zengraoli/article/details/9663057 STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值 ...

  8. 《Boost程序库完全开发指南》读书笔记-日期时间

    ●timer库 #include <boost\timer.hpp> #include <boost\progress.hpp> 1.timer类 // timer类的示例. ...

  9. boost------signals2的使用1(Boost程序库完全开发指南)读书笔记

    signals2基于Boost的另一个库signals,实现了线程安全的观察者模式.在signals2库中,观察者模式被称为信号/插槽(signals and slots),他是一种函数回调机制,一个 ...

  10. boost------ref的使用(Boost程序库完全开发指南)读书笔记

    STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在内部保修函数对象的拷贝并使用,例如: #include "stdafx.h&quo ...

随机推荐

  1. linux常用命令(六)

    用于查找系统文件的相关命令 grep find locate grep:查找文件中符号条件的字符串(关键词) 命令语法:grep [选项] 查找模式 [文件名] 选项 选项含义 -E 模式是一个可扩展 ...

  2. oj练习题程序编程题

    打印图形Description按要求输出由*组成的图案Input无需输入Output输出下面由"组成的图案卡 11 print('*') print("***") pri ...

  3. QT(9)-QStyleOption及其子类

    1 QStyleOption QStyleOption及其子类包含QStyle函数绘制图形元素所需的所有信息. 出于性能考虑,成员函数很少,对成员变量的访问是直接的(即使用.或者->运算符).这 ...

  4. 不同角度理解线程的状态(操作系统 & Java API)

    3.12 五种状态 ( 操作系统 层面) 这是从 操作系统 层面来描述的 [初始状态]仅是在语言层面创建了线程对象,还未与操作系统线程关联 [可运行状态](就绪状态)指该线程已经被创建(与操作系统线程 ...

  5. vivo 网络端口安全建设技术实践

    作者:vivo 互联网安全团队 - Peng Qiankun 随着互联网业务的快速发展,网络攻击的频率和威胁性也在不断增加,端口是应用通信中的门户,它是数据进出应用的必经之路,因此端口安全也逐渐成为了 ...

  6. AtCoder Beginner Contest 326 (ABC326)

    A. 2UP3DOWN 直接模拟即可. Code B. 326-like Numbers 枚举,每次拆除百.十.个位,再判断. Code C. Peak Description 数字线上放置了 \(N ...

  7. KingabseES例程-事实数据与规则的匹配校验

    KingabseES例程-事实数据与规则的匹配校验 背景 使用规则,对数据进行校验,比如电商的用户购物订单,是否合法.这就需要订单的多维度,如 用户.地区.物流.支付手段.供应商 等各类信息,进行动态 ...

  8. 使用Python将MySQL查询结果导出到Excel(xlsxwriter)

    在实际工作中,我们经常需要将数据库中的数据导出到Excel表格中进行进一步的分析和处理.Python中的pymysql和xlsxwriter库提供了很好的解决方案,使得这一过程变得简单而高效. 建立数 ...

  9. 在Window系统中安装VMware虚拟机搭建Linux服务器

    1.什么是VMware Workstation VMware Workstation Pro是一款桌面虚拟化软件.我们可以通过Workstation Pro在Windows或Linux PC上运行多个 ...

  10. 解锁 ElasticJob 云原生实践的难题

    发生了什么 最近在逛 ElasticJob 官方社区时发现很多小伙伴都在头疼这个 ElasticJob 上云的问题,ElasticJob 本就号称分布式弹性任务调度框架,怎么在云原生环境就有了问题了呢 ...