作者回复: 模板元编程比较复杂,属于屠龙之术,这次我先不讲,如果感兴趣的同学多可以以后单独开一个课程。
作者回复: very nice。
作者回复:
1.是的,这些代码都是模板类,自然会由编译器去解析处理,最后出来的也是编译期数值,也就是静态常量,省去了运行期的技术成本,运行期直接用就行。
2.模板元编程和预处理编程有点像,由编译器来改变源码的形态,但它的规则更复杂,难以理解,你首先要了解泛型编程,之后才能尝试模板元编程。
对于80%的C++程序员来说,我不建议尝试模板元编程,可以参考第1讲。
作者回复: 有点过誉了,受之有愧。
因为C++比较复杂,所以我划出了四个生命周期,方便特性的归类和理解,不然混在一起很容易把思路弄乱。
C++需要在实践中学,要花的时间和精力还是挺多的,不过乐趣也自在其中。
作者回复: 建议先学习一下标准库,了解里面的那些工具,现在开发很少有白手起家的了,用好工具,知道它们能解决哪些问题,写应用也就比较容易了。
比如string/regex处理字符串、map/set集合、线程库等等,跟着课程逐步学吧。
作者回复:
1.课程都是预先录好的,所以不能及时回答,有问题写在留言里,我可以回复,还是希望自己思考得到答案。
2.静态断言的用处很多,判断32/64只是个最简单的例子,只要能够在编译阶段计算出的结果就可以断言,不过这就需要对编译阶段有比较多的认识了。
不用着急,慢慢学C++,了解了泛型后再看静态断言可能就会好懂一些。
作者回复: good
作者回复:
1.回答沾点边。实际上是因为属性标签必须要由编译器解释,而自定义标签编译器是不认识的,所以只能等编译器开发者去加,而不能是自己加。
2.说的比较好。
静态断言是一种对编译环境的“前提”“假设”,要求在编译阶段必须如何如何,可以结合第1讲的生命周期,考虑一下应该如何发挥它的作用。
作者回复: 混合了宏定义和条件编译,实在是难以看懂。
可以直接gdb,看open到底是什么。
作者回复:
1.这面试题太细节了,我也没有深究过,觉得这个题没什么意义。你的思路我觉得靠谱,可以展开来说。
2.在编译期断言各种条件,比如必须是64位平台,类型必须是指针,类型必须有某个成员函数,类型必须可以拷贝等等,需要有编译期的思维方式。
3.是相当于动态语言而言的,比如Python、php,变量类型是动态的。
作者回复: 目前的C++11这块的确很弱,没办法,标准委员会效率就是低,不像公司那样无阻力大干快上。
作者回复: 说的很好。
不过后面的static_const不知道是什么,没这个关键字。
作者回复:
1.预处理器不需要理解宏,只是文本替换,而编译器必须要理解属性才能处理,自定义属性标签相当于是“外来语”,识别不了编译器就无法工作。
2.这个只是最基本的用法,随着对C++理解的深入,还可以对类型做各种静态检查。
作者回复: 我常用的就是vim,你可能不太习惯,其他的没用过,抱歉。
可以参考其他同学,用vs code,然后用插件远程登录Linux。
作者回复: 嗯,这也是我反复思考才得出的经验。
作者回复: 没用过vs,不好帮你。
不过我觉得上网搜一下,应该是个常见的问题,有解决方案。
作者回复: Android和Java不太熟,不是很了解。但我觉得,属性和断言都是源码级别的,如果反编译这些信息应该是看不见的。
作者回复: 后面还有很多我在实际中的经验总结,可以慢慢看,有什么地方没讲到的也可以提,知无不言言无不尽。
作者回复: 注意,-E处理的是预处理阶段的宏,而template是编译阶段,这是两个完全不同的阶段。
编译阶段出来的结果直接就是二进制码了,是看不到源码的。
作者回复: great。