【C++primer】一学期阅读笔记

参考文献(References)

[1] Stanley B.Lippman,Josee Lajoie,Barbara E.Moo.C++ Primer 中文版(第5版)[M].王刚,杨巨峰,北京:电子工业出版社,2013.9


这一学期看了《C++ Primer》。把有用的句子记了下来。今天把它们录入电脑,总结如下。


1.1:    访问main的返回值方法 $echo$? $echo %ERRORLEVEL%
1.2:    iostream → istream + ostream
1.3:    调试打印语句保持一直刷新,程序崩溃会让输出保持在缓冲流中
1.4:    UNIX系统中文件结束符用CTRL+D
1.5:    type error
1.6:    declaration error
1.7:    修正一个错误后立即调试代码
1.8:    一旦选择了一种风格,就要坚持使用
1.9:    bool(ud)、char(8)、wchar_t(16)、char16_t(16)、char32_t(32)、short(16)、int(16)、long(32)、long long(64)、float(6)、double(10)、long double(10);
1.10:    long long在C++11中定义
1.11:    int下取整 == short long下取整==int long long下取整==long
1.12:    可寻址的最小内存块称为字节(byte)
1.13:    存储的基本单元 字(word)
1.14:    字节由8bit构成,字则由32或64比特构成,也就是4或8字节
1.15:    float 1字 double 2字 long double 3~4个字 float 7有效位 double16有效位
1.16:    明确知晓数值不为负的时候,选用无符号类型
1.17:    算术表达式不要使用char或bool
1.18:    执行浮点数运算选用double
1.19:    超出符号类型范围的值:1继续工作,2崩溃,3垃圾数据
1.20:    2的32 = 4294967296
1.21:    (unsigned)10+(int)(-42) = 2的32次方-32
1.22:    (unsigned)10-(unsigned)42 = 2的32次方-32
1.23:    (unsigned)作循环,条件>=0为死循环
1.24:    --(unsigned)0 = 2的32-1
1.25:    带符号类型和无符号类型进行运算,有符号转无符号
1.26:    (unsigned)10 - (int)10=0
1.27:    (int)10 - (unsigned)10 = 0
1.28:    形如42的值——字面值常量
1.29:    从0开头的整数表示八进制、以0x或0X开头的代表十六进制数
1.30:    int month = 09
1.31:    \? \f \a
1.32:    \7响铃 \12换行符 \40空格 \0空字符 \115字符M \x4d(字符M)
1.33:    字符串字面值的实际长度比它的内容多1
1.34:    "\1234"→'\123'+'4'两个字符
1.35:    "\x1234"表示一个16位的字符
1.36:    对象是指一块能存储数据并具有某种类型的内存空间
1.37:    练习2.10
1.38:    extern int j//声明i而并非定义i
1.39:    extern包含初始值就不再是声明了
1.40:    全局变量多个文件共同使用,则用extern声明即可
1.41:    C++静态类型语言statically typed 类型检查 type checking
1.42:    不能连续出现两个下划线,不能以下划线紧连大写字母开头,函数体外的标识符不能以下划线开头
1.43:    变量名一般用小写字母、自定义的类名以大写开头
1.44:    alignas、register、alignof、decltype、reinterpret_cast、asm、auto、typeid、typename、enum、static_cast、char16_t、explicit、noexcept、char32_t、export、nullptr、volatile、wchar_t、constexpr、thread_local、const_cast
1.45:    and、bitand、compl、not_eq、or_eq、xor_eq、and_eq、bitor、not_or、xor
1.46:    scope作用域
1.47:    在对象第一次被使用的地方附近定义它是一种好的选择,因为这样做有助于容易找到变量的定义
1.48:    for(int i=0;i!=10;++i)执行几次?10,i = [0:9]
1.49:    复合类型compound type引用和指针
1.50:    (base type)+(declarator)
1.51:    右值引用 rvalue reference 左值引用 lvalue reference
1.52:    refers to global scopeblock scope
1.53:    引用必须被初始化
1.54:    引用一生只能绑定一个对象
1.55:    pointer指针
1.56:    解引用符(*)\
1.57:    int *p1 = nullptr,int *p2 = 0,int *p3 = NULL
1.58:    void* ① 可以存放任意对象的地址 ② 和别的指针作比较 ③ 作为函数的输入和输出
1.59:    int&r = 0 是错的
1.60:    int *const p2 = &i2 是对的
1.61:    const int &r = 0 是对的
1.62:    const int *const p3 = &i2 是对的
1.63:    const int *p1 = &i2
1.64:    const int &const r2 是错的
1.65:    const int *p 是对的
1.66:    在多个文件出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量
1.67:    添加extern在多个文件之间共享const对象
1.68:    const int &r1 = ci
1.69:    指向常量的指针,常量指针,常量const
1.70:    常量表达式const expression
1.71:    在编译过程中就可以得到结果
1.72:    使用constexpr类型由编译器来验证常量表达式
1.73:    算术类型,引用和指针都属于字面值类型
1.74:    自定义类不属于
1.75:    不能定义成constexpr 
1.76:    int null=0,*p=null;
1.77:    类型别名(type alias)
1.78:    typedef 同名化
1.79:    别名声明 alias declaration
1.80:    using SI = Sales_item,同义词
1.81:    SI item 指针常量和类型别名
1.82:    typedef char* pstring,const pstring cstr = 0,const char *cstr = 0
1.83:    前者表示指向了char的常量指针,后者表示指向了const char的指针
1.84:    auto自动分析表达式结果所属的类型
1.85:    auto一行申请多个变量的时候全部要一样
1.86:    decltype引入了第二种类型说明符
1.87:    decltype(f())sum = x,sum的类型就是函数的返回类型,不实际计算函数的返回值
1.88:    头文件一旦改变,相关的源文件必须重新编译以获取更新过的声明
END 20150921 星期一


2.1:    头文件保护符header guard
2.2:    #ifndef SALES_DATA_H …… #endif
2.3:    第一次包含时,#ifndef为真,即未包含该头文件,所以执行到#endif
2.4:    到了第二次包含时为假,所以就不导入该头文件了
2.5:    预处理变量名字全部大写
2.6:    string可变长字符串 vector可边长的集合
2.7:    using std::cin
2.8:    string s4(10,'c')
2.9:    用等号初始化一个变量叫拷贝构造化
2.10:    用括号初始化叫做直接初始化
2.11:    cin>>不读入换行符存在缓冲区
2.12:    string::size_type无符号类型的字,足够存放下string对象的大小。有string.size()就不要与int作计算了,避免unsigned和int混用
2.13:    标准库的名字总能在std::中找到
2.14:    cctype isalnum(c)字母数字 isalpha(c)字母 iscntrl(c)控制字符 isdigit数字 islower isprint可打印字符 ispunct标点符号 isspace空白 issupper大写字母 isxdigit十六进制数 tolower toupper
2.15:    for(auto c:string)cout<<c<<endl
2.16:    vector<T> v5{a,b,c,……}
2.17:    vector<int> ivec(10,-1)
2.18:    vector.push_back(i)
2.19:    v[n]
2.20:    for(auto &i:v){i*=i;}
2.21:    s.begin()返回指针
2.22:    begin()返回第一个元素
2.23:    end()返回最后一个元素的下一个元素(空)
2.24:    for(auto it = s.begin();it!=s.end() && !isspace(*it);++it)*it=toupper(*it);
2.25:    begin()和end()若为const常量则返回const_iterator否则返回iterator
2.26:    difference_type
2.27:    如果不清楚元素的确切个数 请使用vector
2.28:    自量常量表达式constexpr
2.29:    编译器扩展compiler extension
2.30:    由内向外 自右向左阅读
2.31:    cstddef定义了size_t表示内存中任意对象的大小
2.32:    int* e = arr[10]
2.33:    begin(int[])
2.34:    end(int[])
2.35:    两个指针相减的结果类型是ptrdiff_t
2.36:    strcmp比较p1==p2 0 p1>p2+ p1<p2_strcat 将p2附加到p1之后,返回p1
2.37:    strcpy将p2拷贝到p1,返回p1
2.38:    strlen以'\0'空字符判断结尾
2.39:    c_str()
2.40:    无法保证c_str()指向的数组一直有效
2.41:    for(auto& row:ia)for(auto&col:row){}
2.42:    int i = 0 , cout<<i<<' '<<++i<<endl
2.43:    逻辑与&& 逻辑或|| 条件?: 逗号,明确规定了运算对象的求值顺序
END 20150928 星期一 P123


3.1:    如果改变了某个运算对象的值,在表达式其它的地方不要再使用这个值
3.2:    (-m)/n = m/(-n) = -(m/n)
3.3:    m%(-n) = m%n
3.4:    (-m)%n = -(m%n)
3.5:    (-m)%(-n) = (-m) % n = - (m%n)
3.6:    优先使用前置版本递增运算符++i
3.7:    cout<<*pbeg++<<endl
3.8:    输出*pbeg所指的元素,然后pbeg指针向右诺一格
3.9:    等价于cout<<*pbeg<<endl
3.10:    ++pbeg
3.11:    前者比后者简洁且更少出错
3.12:    ptr->mem (*ptr).men *iter.empty()
3.13:    ++*iter,iter++→empty()
3.14:    string s = "word"
3.15:    string p1 = s 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值