首页 > 编程语言 >罗剑锋的C++实战笔记(学习笔记1)

罗剑锋的C++实战笔记(学习笔记1)

时间:2022-11-28 11:56:59浏览次数:60  
标签:函数 推导 auto 代码 C++ 笔记 类型 剑锋

本系列文章记载学习一门在线课程 罗剑锋的C++实战笔记 过程中的心得体会,只会记录新增加的知识点,那些心中已熟透的知识点,不会重复记录。

c++的主战场在 Linux 上,现在开发 Windows 程序,更多的是用 C# 等语言。

后续以问答的形式,来梳理汇总新掌握的注意事项和经验教训。

三句名言镇楼

  • 任何人都能写出机器能看懂的代码,只有优秀的程序员才能写出人看懂的代码

  • 两种写程序的方式:把代码写的非常复杂,以至于"看不出明显错误"。把代码写的非常简单,以至于"明显看不出错误"。

  • 把正确的代码改快速,要比把快速的代码改正确,容易得太多。

如何查看gcc对c++标准的支持情况?

  1. 通过 g++ -v 得到g++版本号。例如:本机版本号为 gcc version 7.5.0
  2. 下图为不同gcc版本对C++标准的支持情况。

gcc版本对C++标准的支持情况.png

更为具体的,可以参考 C++ Standars Supprot in GCC 网站,查看各个标准在各个编译器的支持情况。

C++有哪些编程范式?

编程范式是指导编写代码的思路、规则、习惯和常用方法的统称,是一种方法论

现代C++(C++11以后)支持以下五种编程范式:

  1. 面向过程: ifelseswitch,核心是功能分解为具体步骤,依次执行这些步骤。
  2. 面向对象: classpublicvirtual, 核心是功能抽象为各种类,将数据以及职责封装进对应类,通过类对象之间的协作实现功能。以抽象封装为基础,继续抽象对象之间的关系和通信,最后构成由许多相关联的对象系统。
  3. 泛型: templatevector,核心是将类型当做参数,利用模板来复用代码。
  4. 模板元编程:templatestructenable_if,核心是编译期间类型运算,代码由编译器执行。
  5. 函数式: lambda,核心是一切皆函数,皆可调用。

日常工程开发中,使用 面向对象+泛型,少量函数式,不用模板元

代码规范

留白: 恰当地运用空格和空行,空格用来分隔变量和操作符,空行用来分隔逻辑代码块,使得整体错落有致,舒缓得当,更易理解。

注释:正确、清晰、简洁。从使用者和阅读者的角度出发,来看待注释。

类设计:少用继承,多用组合。控制继承的层次,用 UML 类图来主观检查。

接口设计:简单直接,只负责单一功能。

预处理过程中需要注意的地方

  1. 宏是没有作用域的,默认全局生效。为避免宏定义冲突,有两种解决方法:
    • 使用完后使用 #undef 来取消宏定义
    	#define CUBE(a) (a) * (a) * (a)
    	cout << CUBE(a);
    	#undef CUBE
    
    • 在使用前,先进行检查。如果之前有定义,则取消定义。
    	#ifdef AUTH_PWD
    	# undef AUTH_PWD
    	#endif
    	#define AUTH_PWD "XXX"
    

编译阶段能做的事

属性标签

C++11使用两对方挂号的形式 [[ ... ]] ,方挂号中间是属性标签。deprecated的编译期标签,标记已废弃的变量、函数。


[[deprecated("deadline:xxxx")]]
int old_fun()
{}

常用的属性标签:

  1. unused: 用于变量、类型和函数等,表示暂时不用,但最好保留
  2. constructor: 指示函数会在main函数之前执行
  3. destructor: 指示函数会在main函数之后执行
  4. always_inline: 要求编译器强制内联
  5. hot: 标记为热点函数,可更积极优化
  6. noreturn: 指示函数不会有返回值

静态断言

常用的assert函数只能在运行期生效,对应的,在编译期生效的断言为 static_assert,将检测时机提前到编译期。

标准库的 type_traits,它提供了各种编译期函数,可进行更为细致的判断。

特殊功能标示符

final 标识符用于类定义,可显式禁用继承。

= default标识类的基本函数由编译器实现。

自动类型推导

auto总是推导出值类型,可附加constvolatile&类型修饰符,得到新的类型。

auto x= 10L;        // 推导为 long

auto& x1 = 1;      //推导为 long&
auto* x2 = &x;     // 推导为 long*
const auto& x3 = x;   // 推导为 const long&

decltype的形式类似于函数,后面的圆括号用于计算类型的表达式。它不仅能推导出值类型,还能够推导出引用类型。

自我总结: auto是从值来推导数据类型,decltype是从变量自身来推导数据类型。

标签:函数,推导,auto,代码,C++,笔记,类型,剑锋
From: https://www.cnblogs.com/cherishui/p/16931796.html

相关文章

  • 驱动开发学习笔记---阻塞和非阻塞IO
    一、阻塞和非阻塞简介当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式IO就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞IO......
  • C++中的Pointer member dereference(D-reference) operator
    在C++中,比如我们可以把一个结构体struct的地址赋给一个指针pointer然后使用这个指针去访问这个结构体中的元素时,可以使用pointermemberD-referenceoperator: ->用来......
  • C++ ---获取类成员函数地址
    #include<iostream>classTA{public:inta;voidTA1(){//this->a=5;printf("a=%d\n",a);}voidTA2(){......
  • Django-课程介绍-笔记
    软件框架问题1:什么是软件框架?举个简单的例子,对于一个公司来说,公司中有各个职能部门,每个部门各司其职,通过部门之间的配合来完成工作,这些部门就形成了一个公司的组织架构。从......
  • Django-1.入门-笔记
    本节课是通过Django框架最终完成一个"图书-英雄"信息管理的小例子。目标对使用django框架有一个全面的认识,包括开发流程、基本概念要素,并不针对某个概念知识点详细拆解,后续......
  • Django-1.1搭建环境-笔记
    虚拟环境在开发过程中,当需要使用python的包时可以联网安装sudopip3install包名称使用如上命令,会将包安装到/usr/local/lib/python3.5/dist-packages下。产生的问题如果在......
  • Django-1.2创建项目-笔记
    创建图书管理项目我们以一个电商网站为例,网站上有跟用户有关的页面,有跟商品有关的页面,还有跟订单有关的页面,这样的一块内容其实就是网站的一个功能模块。在django中,项目的组......
  • 区块链学习笔记
    这是我学习北京大学肖臻老师《区块链技术与应用》公开课的学习笔记课程地址:北京大学肖臻老师《区块链技术与应用》公开课比特币比特币中的密码学原理比特币被称为加......
  • 20221128 语文笔记
    秋词要点区分:刘禹锡:梦得曹操:孟德自古逢秋悲寂寥,我言秋日胜春朝。(一二句运用了对比的写法(古人:悲秋、作者:颂秋),表达了作者乐观豁达的心境)晴空一鹤排云上,(义项:晴空、鹤......
  • React 学习笔记之二 - React 详解
    2.1为什么使用ReactReact.js只是一个JS库,而其整个技术栈是一个渐进式框架。渐进式的含义是:主张最少,也就是可以只用它其中的一部分,有了新的需求后再引入其他的类库。......