C++入门——C++语言导学

C++语言导学(A Tour of C++)初读记录

目录

笔记

第一章

第二章

第三章

第四章

第五章

第七章

第八章

第十章

第十一章

第十三章

总结


笔记

3.23

第一章

一、感到模糊

        1.7节的constexpr函数

要想定义成constexpr,函数必须非常简单:函数中仅有一条计算某个值的return
语句——C++语言导学

To be constexpr, a function must be rather simple and cannot have side effects and can only use information passed to it as argument.

In particular, it cannot modify non-local variables, but it can have loops and use its own local variables.

——A Tour of C++(2019)

  只有return??

这一段中文版有点奇怪?英文是说constexpr的函数要简单,不能有side effects(?副作用?啥副作用),并且只能用到传递给该函数信息作为参数,尤其是不能修改非局部变量,但可以用自己的局部变量。

constexpr double nth(double x, int n)   // assume 0<=n 
{ 
    double res = 1; 
    int i = 0; 
    while (i<n) {   // while-loop: do while the condition is true (§1.7.1) 
         res*=x; 
         ++i; 
    } 
    

二、读前不了解

1.1_5节 sizeof

bool=1,char=1,int=4,double=8

取决于存放一个字符所需的空间

2.1_5节 初始化可以用{}auto+=

{}不会发生可能导致信息丢失的类型转换

auto =避免冗余

3.1_7节constexpr

在编译时求值

允许把数据置于只读内存中

用在常量表达式中的函数(表达式在编译时求值)必须定义成constexpr

接受非常量实参时不是常量表达式

意义

        数组界、case标签、模板参数、constexpr声明的常量

        编译时求值-性能

        满足不变性概念

4.1_8节引用&指针*

引用&  节省拷贝代价

指针*   用nullptr达到指向某个对象的要求,使用时检查是否指向对象if(p==nullptr) return 0;

3.24

第二章

一、感到模糊

应该是把类型域和union封装到一个类中

要想时刻保持类型域(type field,此例中是t)与union中所存类型的对应关系并不是一件容易的事情。为了避免潜在的错误,我们可以把这些类型封装成一个union以便于确保其一致性。在应用程序的层面上,基于这种标记联合(tagged union )的抽象概念比较普遍和实用,相反"裸"unlon很少会被用到。

Maintaining the correspondence between a type field (here, t) and the type held in a union is error-prone. To avoid errors, we can enforce that correspondence by encapsulating the union and the type field in a class and offer access only through member functions that use the union correctly. At the application level, abstractions relying on such tagged unions are common and useful. The use of “naked” unions is best minimized.

二、不懂

类型域type field是什么?是指定义属于某个类型的具体对象(变量)可以取值的范围?

那这个范围是由类型指定还是变量自己?

维护类型域和类型对应关系封装到一个集合中,是指什么?变量可能改变类型??

Maintaining the correspondence between a type field (here, t) and the type held in a union is error-prone.百度翻译——维护类型字段(此处为t)与联合中保存的类型之间的对应关系容易出错。

3.25

第三章

第四章

一、感到模糊

成员函数push_ back ( )把它的实参添加给vector(此处是eyes),每次将向量的长
度加1。

push_back()是vector的成员函数

二、读前不了解

类的成员函数的声明后的const,表示不会修改调用的对象

double real() const { return re; } 
double imag() const { return im; }

3.26

第五章

第七章

第八章

一、感到模糊

如果像上面这样输出多个相关的项,你肯定很快就庆倦了不断重复输出流的名字。幸运
的是,
输出表达式的结果是输出流的引用,因此可用来继续进行输出

People soon tire of repeating the name of the output stream when outputting several related items. Fortunately, the result of an output expression can itself be used for further output

说的其实挺清楚的,但感觉如果我读之前不知道这个点,到这儿肯定看不懂。

cout<<i<<j

感觉具体一点(尽管损失了“引用”的含义)

        前面cout<<i的结果是cout,所以可以继续cout<<j

或更详细一点

        cout是ostream类的对象,<<是重载的操作符。这一操作符所重载的函数的参数为<<后的变量(i、j),返回类型为ostream的引用(& ostream),返回cout(return cout)

或写出怎么重载的<<

ostream & ostream::operator << (const char* s)
{
    ...//输出s的代码
    return * this;
}

 都要好一些

二、不懂

关键是is>>i操作返回一个指向is的引用,而检测一个iostream对象(如is)的结果为true的话,表示流已经准备好进行下一个操作

What is happening here is that the operation is>>i returns a reference to is, and testing aniostream yields true if the stream is ready for another operation.

>>操作的返回不是iostream的引用吗?为什么会是一个bool类型的值

        

3.29

第十章

第十一章

第十三章

总结

略过了很多部分,尤其是具体的实现,比如容器、算法的部分,感觉这些部分可以直接去看C++primer(主要是看不进去脑壳痛),然后有的地方看了但就没怎么看懂,所以效果不好。

结果就是,总算对C++有大致了解了,尤其是之前完全不知道的并发、正则表达式、容器,而lambda表达式的部分连了解都没达到,就知道有这个东西能创建一个函数对象吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值