热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++核心知识点回顾与深化

虽然经常使用C++,但一些细节可能并不常用。通过查阅资料,回顾了几点重要的细节。首先,建议在构造函数的初始化列表中对成员对象进行初始化,而不是在构造函数体内,这样可以提高代码的效率和可读性。此外,还探讨了其他几个关键概念,如常量成员函数、引用计数和智能指针的使用等。这些内容对于深入理解和高效使用C++至关重要。

经常用C++,但是有些细节未必经常会用到。随便翻了翻书,随便拾起了几条细节回忆。

 

1.构造函数里对成员对象的初始化尽量在初始化列表里,而不要在构造函数里赋值。因为,c++对象的构造分为两步:

  1)数据成员的初始化

  2)执行被调用构造函数体内的语句。

  如上,数据成员初始化时也会调其构造函数,如果没有初始化列表,那么数据成员对象的默认构造函数会被调用一次。OK,这时到了第2步,还会再调用一次赋值操作。这样,对数据成员的初始化做了2此操作,一是缺省构造函数,二是赋值操作。其实如果写在初始化列表里,那么只需要一次构造函数的调用就可以完成。当然如果数据成员是固定的类型,那么两种情况的效率是相当的。

 

2.区分一下重载,覆盖和隐藏。

  重载:函数名相同,参数不同。在相同的作用域里。

  覆盖:虚函数override。派生类里的虚函数覆盖基类里的同名同参数虚函数。

  隐藏:如果派生类和基类里的函数名相同而参数不同,无论是否虚函数,在派生类里都“看不见”基类里的该函数。如果派生类里的某函数和基类里的某函数名称和参数都相同,而且不是虚函数,那么在派生类里也“看不见”基类里的该函数。

 

3.内联函数一般是跟在函数的定义而非声明。

  如下风格的内联函数不能生效

  inline void foo(int x,int y)

  void foo(in x,int y)

  {

      //to do

  }

  而如下风格的函数Foo 则成为内联函数:
  void Foo(int x, int y);
  inline void Foo(int x, int y) // inline 与函数定义体放在一起
  {

      //to do
  }

 

4. 初始化列表中成员列出的顺序和它们在类中声明的顺序相同。和初始化列表里的顺序无关。

 

5. extern “c”。

  extern “C”
 {
    void foo(int x, int y);
    // 其它函数
 }
 或者写成
extern “C”
{
    #include “myheader.h”
    // 其它C 头文件
}
这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我们可以用#include 直接引用这些头文件。

 

6.对于不修改成员变量的函数,都应该定义成const函数。

 

先看了这些,以后想到再补充。


推荐阅读
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 本文介绍了如何利用X_CORBA实现远程对象调用,并通过多个示例程序展示了其功能与应用,包括基础的Hello World示例、文件传输工具以及一个完整的聊天系统。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • 本文介绍了一种方法,通过使用Python的ctypes库来调用C++代码。具体实例为实现一个简单的加法器,并详细说明了从编写C++代码到编译及最终在Python中调用的全过程。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • 在现代Web开发中,HTML5 Canvas常用于图像处理和绘图任务。本文将详细介绍如何将Canvas中的图像导出并上传至服务器,适用于拼图、图片编辑等场景。 ... [详细]
author-avatar
sx-March23
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有