C/C++
TonyaBaSy
坚持不是单单为了成功。坚持是更是为了在俯瞰人生的时候能够自我欣赏,而不是自我叹息。
展开
-
constexpr 和 inline
constexpr 和 inlineconstexpr: 用于常量函数constexpr int foo() { return 42;}constexpr int f = foo();使用约定:所有参数及返回值必须为字面类型。一般放在头文件里,inline函数一般也放在头文件里。inline可以用于构造函数。原创 2016-05-07 21:00:03 · 470 阅读 · 0 评论 -
traits简单认识
我不知道官方或一些书上是如何去解释traits的,我的理解是:当函数,类或者一些封装的通用算法中的某些部分会因为数据类型不同而导致处理或逻辑不同(而我们又不希望因为数据类型的差异而修改算法本身的封装时),traits会是一种很好的解决方案。本以为能很简单的描述它,谁知道还是用了如此长的句子才说明清楚,相当的惭愧。大家只要有个大概的概念就ok了,甚至即使完全没概念也没关系,下面会通过实际代码来说明。先原创 2016-05-07 21:27:50 · 318 阅读 · 0 评论 -
容器类之 unordered_map
该容器的特点存放数据的方式:key = value,通过key进行检索。存放数据时无序的。检索的速度比map类快。重载了[ ]运算符。iterator可以访问key和value。unordered_map<int, bool> m = { { 5, true }, { 6, true } };unordered_map<int, bool>::it原创 2016-05-07 21:27:12 · 411 阅读 · 0 评论 -
static
全局的静态变量放在.data段(已初始化)或者.bss段(未初始化),局部静态变量放在.data中(系统自动初始化其值)。放在这两个段的内容的特点:记录值的改变,例如函数内部中的静态变量退出后变量不会销毁,而是把值记录下来。下次调用该函数时,其值还是上次保存的值。仅在该作用域中可以使用,不能跨出作用域使用。如下例中,file2.c中使用hello会报错。//file1.h#include <s原创 2016-05-07 21:25:46 · 241 阅读 · 0 评论 -
左值与右值
对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。下面给出一些例子来进行说明。int a = 10int b = 20int *pFlag = &a;vector<int> vc转载 2016-05-07 21:18:50 · 592 阅读 · 0 评论 -
C++预处理器
C/C++编译系统编译程序的过程为预处理、编译、链接。预处理器是在程序源文件被编译之前根据预处理指令对程序源文件进行处理的程序。预处理器指令以#号开头标识,末尾不包含分号,以换行符结束。预处理命令不是C/C++语言本身的组成部分,不能直接对它们进行编译和链接。C/C++语言的一个重要功能是可以使用预处理指令和具有预处理的功能。C/C++提供的预处理功能主要有文件包含、宏替换、条件编译等。1. 文转载 2016-05-07 21:16:56 · 521 阅读 · 0 评论 -
预编译头文件:*.h.gch文件
预编译头文件,就是将头文件事先编译成一种二进制的中间文件。比如下面代码:gcc -c a.h a.c其中,由于 a.h 被当成 *.c 文件一样进行编译,生成了一种二进制中间格式的文件(a.h.gch)。 a.h 文件 和 a.c 文件分别被解析,合并,并通过编译生成了 a.o 文件。虽然 a.o 文件中包含了很少的头文件代码,头文件的大小并没有对 a.o 文件的规模产生很大影响,但是对头文件原创 2016-05-07 21:15:27 · 989 阅读 · 0 评论 -
namespace 命名空间
1. 定义命名空间的定义如下:namespace SpaceName { ...}其中,空间内部可以定义和声明类、变量、函数,变量会被赋予初值。定义时不仅可以定义全局,可以定义在已有的命名空间中(嵌套定义)。命名空间可以不连续(除未命名的命名空间),一个命名空间的第一次使用为定义,后续的使用为打开。注意,一般不建议把头文件包含进命名空间,这样做意味着把头文件中所有的命名全部加入到该空原创 2016-05-07 21:13:32 · 970 阅读 · 0 评论 -
头文件搜索路径
#include “headfile.h”先搜索当前目录然后搜索-I指定的目录再搜索gcc的环境变量CPLUS_INCLUDE_PATH(C程序使用的是C_INCLUDE_PATH)最后搜索gcc的内定目录/usr/include /usr/local/include /usr/lib/gcc/x86_64-redhat-linux/4.1.1/include各目录存在相同文件时,先找到哪原创 2016-05-07 21:12:04 · 302 阅读 · 0 评论 -
友元函数
友元函数友元函数是一个有权访问所在类中私有成员的外部普通函数。因为是个外部函数,不在类的管辖范围之内,所以不受限制关键词(如public、private等)的约束。因为是一个外部函数,因此函数域中并没有 this指针,它是通过传入该类对象的参数,或则函数体内定义该类对象,来访问私有成员。class A {public: friend int add(int i);private:原创 2016-05-07 21:07:47 · 322 阅读 · 0 评论 -
template详解
1. 函数模板1. 函数模板定义关键字:“template开头”,“参数列表非空”定义一定要以:template<…>开头(为了解释为什么 inline 在第 2 位置)定义中模板参数列表不能为空(模板特例化中参数列表可以为空)。template<tempname T> inline T funcName(const T &a, const T &b) { return (a + b);原创 2016-05-07 21:29:08 · 4730 阅读 · 0 评论