博客
关于我
C++学习(38)
阅读量:723 次
发布时间:2019-03-21

本文共 1496 字,大约阅读时间需要 4 分钟。

C语言与C++语言学习笔记


1. 全局变量与多个组成部分共享

全局变量可以在可被多个组成部分包含的头文件中定义,这一特性在编程时非常有用。它能够保证变量在各个模块之间保持一致。


2. 多线程应用中的输出问题

以下程序输出会经历多次fork()操作,导致缓冲区内容被复制多次:

int i;for (i = 0; i < 2; i++) {    fork();    printf("-");}

这个程序会执行6次printf调用,但只有2次实际输出。因为父进程的输出缓冲区会被子进程复制,导致多个进程同时writing到缓冲区,结果呈现以下情形:

  • fork() // i=0
  • printf("-") // buffer="-"
  • fork() // i=1
  • printf("-") // +1
  • printf("-")
  • printf("-") // fork() // i=1
  • printf("-") // +1
  • printf("-")

最终的结果共出现了8个“-”符号。


3. C++中类成员的特性

C++中,静态成员属于整个类而非单个对象,具有如下特点:

  • 静态成员函数:在对象创建前即被分配内存,且只能访问静态成员。
  • 静态成员的可修改性:所有对象均可修改其值,可以被共享。

静态成员的声明方式为static,而常量通常由final关键字声明,不可修改。

静态成员不具备多态性,无法通过多态实现。


4. 内存管理函数

以下内存分配函数是常用的:

  • malloc():在堆中分配内存,需使用free()释放。
  • calloc():与malloc类似,但初始化值为0。
  • realloc():扩容时使用,需确保新大小大于现有块大小。

内存分配类型:

  • 栈alloc():用于栈中的内存分配,无需释放。
  • 堆malloc():默认使用堆分配。

5. C++中不可被继承的成员函数

在C++类体系中,不可被派生类继承的成员函数包括:

  • 构造函数(Constructor)
  • 静态成员函数(Static member function)
  • 非静态成员函数(Non-static member function)
  • 赋值操作函数(Assignment operator)

构造函数与派生类继承规则:

  • 派生类无需显式调用基类构造函数,但编译器会依据构造函数的参数进行调用。
  • 默认构造函数仅在没有显式定义的情况下提供。

6. 静态变量特性

静态变量在程序执行周期内始终存在,使其在多个函数中使用成为可能。


7. 抽象类特点

抽象类由于无可实例化对象而成为基类,主要用途有:

  • 实现多态性。
  • 作为全局变量用于操作隐藏。

特征:

  • 含有纯虚函数的类为抽象类。
  • 抽象类不能实例化,需通过继承实现。

8. 转换类型

在C++中,不同转换类型的地位有所不同:

  • reinterpret_cast:对任何类型的指针转换均可使用。
  • static_cast:需程序员判断转换安全性。
  • const_cast:用于常量与非常量的转换。
  • dynamic_cast:对指针或引用进行安全性转换。

9. 二进制在C语言中的表示

C语言中的整数默认为二进制格式,例如:

int i = 1;  // 二进制:1static int mask = (~0) << 1;  // 十进制:2

十六进制表示需使用0x前缀。


10. 多线程i++安全性

多线程环境中的i++操作并不绝对原子性,因为内存操作分解为多个步骤:

  • 取出内存值到寄存器加一。
  • 写回修改后的值到内存。

因此在并发执行下,正确读取和写入顺序至关重要。如上文所述,最终i值可达最大值200和最小值2。

转载地址:http://hjcgz.baihongyu.com/

你可能感兴趣的文章
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>