
C++
律白
心之所向,素履以往
展开
-
c++多线程编程--数据竞争
数据竞争如果多个线程同时访问同一个变量, 可能对引起数据竞争:如果这个访问是读操作,对这个数据没影响。如果这个访问是写操作,很有可能引起数据竞争。试想一下,如果线程A想要对主线程中的变量num进行加一操作,刚读取变量A的值后,时间片用完,转入阻塞状态,此时线程B主线程中的变量num进行加一操作。此后线程A再次执行,但还是用之前读取的num值进行操作,而没有感知到线程B已经对num变量进行过修改。互斥对象mutex对象是指定代码的访问。头文件#include<mutex>原创 2020-10-25 19:04:26 · 1649 阅读 · 0 评论 -
c++多线程编程--thread成员函数
thread成员函数thread类提供了丰富的成员函数帮助用户实现多线程编程。我们把构造函数单独拎出来作为一章来介绍。如下thread构造函数非构造函数的成员函数介绍:序号函数格式返回值意义1join()void让当前线程等待线程t执行完成2joinable()bool判断当前线程是否可以join3detach()void继续执行当前线程,不必等待线程t执行完成4get_id()std::thread::id获取线程id5st原创 2020-10-25 16:44:31 · 1579 阅读 · 0 评论 -
浅析c++中函数调用其他文件中的模板函数出错
错误描述在如下图所示的文件中展现的调用关系,在一个.cc(main.cc)文件中调用另一个.cc(test.cc)文件中的模板函数,编译过程出错。 // test.cc template<typename T> void function(T a) { ... } //test.h template<typename T> void function(T a); //main.cc int main() { int a=0; function(a)原创 2020-10-21 22:59:28 · 1917 阅读 · 0 评论 -
c++关键字:const mutable volatile
文章目录const场景1: 修饰变量场景2: 修饰指针场景3: 修饰函数场景4: 修饰类成员修饰类成员变量修饰类成员函数未经授权,禁止转载!创作不易,尊重原创!~~constconst,顾名思义,就是常量,其修饰的目标不能改变。这些目标主要包括变量,指针,函数,类。下面针对这四个目标对象进行不同的说明。场景1: 修饰变量const修饰变量,不论是放在数据类型前还是放在数据类型后,都是一个意思表示,该变量是一个常量。const T variable_name;T const variable原创 2020-09-22 23:44:45 · 149 阅读 · 0 评论 -
c++编译错误: included multiple times, additional include site here
编译c++代码时出现如下错误信息:main.cc:2:10: note: './hello.h' included multiple times, additional include site here#include "hello.h"原因分析:我的代码结构如下, 在main.cc文件中由于world.h中已经导入过一次hello.h文件了,如果main.cc中include一次hello.h文件,则hello.h的头文件会被编译两次。这就是出错的原因了。// main.cc#includ原创 2020-09-12 16:54:18 · 1642 阅读 · 0 评论 -
c++中模板的那点事
概念对于功能一样的函数,只是参数的数据类型不同,每个函数都重复写一次,对程序猿来说是一个很低效的解决方案,模板函数在定义函数的时候不指定参数的具体类型,可以解决这一问题。模板函数是一种泛形编程,举一反三, 有没有。机制编译器在模板函数声明的地方做一些简单的简单的编译工作(替换),在遇到调用模板函数的地方,用实际的类型参数替换模板参数,进行重新编译。称为二次编译。特化泛形编程是一面双刃剑,泛形的树觉类型T理论上是包含所有数据类型的,但某些类型不适用于模板函数中的处理逻辑,因此要把这类函数拎出来单独原创 2020-09-05 12:08:08 · 642 阅读 · 0 评论 -
宏定义函数
概念在预编译阶段完成代码替换。优势(1)增加代码的可读性:宏定义的优点很多,但我个人理解宏定义最明显的优点就是增加代码的可读性。求圆的面积, 用“PI * r* r”比 “3.14人r”的可读性就强很多了。#define PI 3.14float circleArea(float r) { return PI * r * r;}(2)自带“模版函数”的buff:宏定义函数的参数没有数据类型,因此可轻松实现模板函数的功能#define MAX(a, b) (a > b ? a原创 2020-08-29 18:56:39 · 15241 阅读 · 1 评论 -
c 与c++中结构体struct
1.C语言中定义: typedef struct Student { int a; }Stu;或者: typedef struct { int a; }Stu;其中Student称为标签,可与struct一起组成类型名,即struct Student 等价于类型名,也与 Stu 等价。2.C++中的定义: struct Student1 { int a; ...原创 2018-02-25 23:57:30 · 460 阅读 · 0 评论