C++
半夏茶白
别着急,在变好
展开
-
C++ 继承同一个的基类的所有派生类使用同一个全局变量的三种方式
-原创 2022-07-27 15:00:17 · 605 阅读 · 1 评论 -
c++ 十进制转十六进制字符串(0x***)格式
init是一个进程,确切地说,它是 Linux 系统中用户空间的第一个进程。由于Android 是基于Linux 内核的,所以 init 也是 Android 系统中用户空间的第一个进程,它的进程号是1转载 2022-02-21 15:46:22 · 2534 阅读 · 0 评论 -
多线程编程std::promise,std::future, std::shared_future, std::packaged_task, std::async
std::promise 和 std::future简介 std::promise 和 std::future 是 C++ 进行单向数据传递的一种方式。std::promise 是数据的输入端,std::future 是数据的输出端使用在线程1中创建一个std::promise对象std::promise<int> promise;线程1之前从promiseObj获取std::future对象std::future<int> future = promise.get原创 2021-12-07 20:36:58 · 756 阅读 · 0 评论 -
数值与对象之间的类型转换
数值转对象 class MyClass { private: int mValue; public: MyClass(int value) { mValue = value; } }; int main(int argc, const char * argv[]) { int n = 33.3; MyClass myClass(30); // 将int类型的值转换为MyClass对象 return 0;原创 2021-11-02 21:28:17 · 361 阅读 · 0 评论 -
c++ 友元函数
友元函数使用规则在类(结构体)中需要定义友元函数的原型(前面加friend)friend只能在友元函数的原型加,不能在友元函数的实现部分加friend尽管友元函数的原型在类中定义,但不能像调用类成员方法一样调用友元函数实现类中定义的操作符函数自定义数据类型默认放在左边, MyClass operator*(int right) { return MyClass(mValue * right); }如果想要实现MyClass operator*(int l原创 2021-11-02 21:21:59 · 678 阅读 · 0 评论 -
操作符重载
操作符重载操作符重载实现#include <iostream>using namespace std;class MyClass{private: int mValue;public: int getValue(); void setValue(int value); MyClass(int value); MyClass operator+(MyClass c) { MyClass myClass(0); myClass.mV原创 2021-11-02 20:58:05 · 603 阅读 · 0 评论 -
c++ 代码优化知识点
头文件尽量不要在头文件include,头文件中前向声明cpp文件中include参见: 减少与关联模块的耦合技巧(c++)函数作为void*回调函数传入,void *user可以传入this,回调函数中可以使用this指针调用类中成员函数新开线程中一定要注意使用sleep,不休眠会导致线程占用CPU过高,可能导致函数调用不到...原创 2021-07-05 20:49:06 · 63 阅读 · 0 评论 -
减少与关联模块的耦合技巧(c++)
尽量避免c++ 头文件中include关联模块头文件,可以使用前向声明B.hclass A;class B {public: B(A* a) : mA(a) {} ~B() {}private: A *mA;}B.cpp#include <A.h>如果在B.h引用关联模块的头文件(A.h),A.h中include的头文件,B文件也会引用,这就导致两个模块之间耦合度高,A模块所做的修改可能会影响到B模块,简单举例,A.h中引用了C.h, 在编译文件中包含了C.h所在路原创 2021-07-02 14:28:59 · 581 阅读 · 0 评论 -
c++函数——decltype关键字
decltype使用场景template<typename T1, typename T2>void templateFun(T1 x, T2 y){ // 当传入值 x:int, y:double时候 T1 sum = x + y; // 报错,因为 x + y 为double类型,T1 为int 类型 // 可以使用decltype关键字解决这个问题 decltype(x + y) sum = x + y; // 使用auto关键字也可以解决原创 2021-06-16 20:08:18 · 492 阅读 · 0 评论 -
c++函数
几种特殊函数内联函数 所谓“内联函数”就是将很简单的函数“内嵌”到调用他的程序代码中,只样做的目的旨在节约下原本函数调用时的时空开销 使用内联函数时,应注意的问题: 1)内联函数的定义性声明应该出现在对该函数的第一次调用之前。 2)内联函数首先是函数,函数的很多性质都适用于内联函数,如内联函数可以重载。 3)在内联函数中不允许使用循环语句和switch结果,带有异常接口声明的函数也不能声明为内联函数。inline void fun(int a, int b){ cout &原创 2021-06-09 20:04:26 · 79 阅读 · 0 评论 -
c++指针函数
// 计算阶乘int factorial(int n){ if(n == 0 || n == 1) { return 1; } else { return factorial(n - 1) * n; }}typedef int (*JC)(int n);int main(int argc, const char * argv[]){ // 函数指针 int m = factorial(5);原创 2021-06-08 19:27:16 · 120 阅读 · 0 评论 -
c++条件语句——容易忽略的冷知识
1. 宏定义中包含多条语句,最好使用do…while(0)语句#define PROCESS do{ cout<<"process"<<endl; cout<<"test" <<endl;}while(0)2. 逻辑表达式中的短路问题短路是指并未执行完条件判断语句就结束执行int m = 10;int n = 20;if(m == 10 || n == 11) {} //执行完m==10,不再继续执行n==11if(m != 10 &&原创 2021-06-07 19:58:43 · 122 阅读 · 0 评论 -
c++循环
forfor(init_expr; test_expr; update_expr)1. init_expr:使用C++的风格,只能初始化同一类型的一个或多个变量,使用C风格的初始化方式可以初始化多个类型的变量2. test_expr:通常是一个逻辑表达式,但是可以是任何的表达式。不过如果表达式是非逻辑表达式,系统会认为表达式返回truefor循环会进入死循环。如果要插入多个表达式,中间用逗号分隔,系统会用最后一个表达式的值做为整个test_expr的返回值。3. update_expr:通常原创 2021-05-24 19:53:21 · 281 阅读 · 0 评论 -
c++复杂数据类型——多维数组、多级指针、 数组模板、 vector(动态数组)
多维数组 // 一维数组 int codes1[10] = {1,2,3}; // 二维数组 int codes2[5][10] = {{1,2},{4,5},{},{},{1,2,3,4,5,6,7,8,9,200}}; //{1,2,3,4,5,6,7,8,9,0,123/*codes2[1][0]*/};*/ cout << "codes2[1][0] = " << codes2[1][0] << endl; //4原创 2021-05-18 20:46:48 · 353 阅读 · 0 评论 -
c++工程中调用c文件或c库
一、c和c++代码不兼容性分析 我们在c++工程中经常会调用c工程文件或者时c库文件。这样就可能会造成c文件和c++文件不兼容性而报错,造成c和c++代码不兼容性的最大原因就是:在c++中有函数名重载机制,而c中没有该机制。为了实现函数重载,在c++中通过在编译生成.o文件的过程中做文章,实际上是将函数名编译成为另一个函数名符号放在.o中,因此实现了同一个重载函数在.o中是不同名的函数符号。而c程序中不存在函数重载,因此.o转载 2021-05-12 16:20:39 · 684 阅读 · 0 评论 -
c++复杂数据类型——动态分配(new)、 释放内存空间(delete)
动态分配内存空间 int *pointer = new int; *pointer = 123; cout << "*pointer=" << *pointer << endl; //123 double *value = new double; *value = 33.22; cout << "*value=" << *value << endl; //33.22dele原创 2021-04-28 21:34:48 · 634 阅读 · 0 评论 -
c++复杂数据类型——指针
指针存储和基本使用 int n = 100; float value = 123.321; cout << "n address = " << &n << endl; cout << "value address = " << &value << endl; long pointer = long(&value); cout << "pointer = " << pointe原创 2021-04-23 19:08:45 · 160 阅读 · 0 评论 -
c++复杂数据类型——结构体、共用体、枚举、匿名类型、类型别名
结构体定义 struct MyStruct { int code; string name; float salary; } myStruct1; MyStruct myStruct2; auto myStruct3 = new MyStruct(); //指针 MyStruct myStruct4 = MyStruct();初始化 struct MyStruct { int code;原创 2021-04-20 19:33:49 · 672 阅读 · 0 评论 -
c++复杂数据类型——数组,字符串
数组 long productIds[199]; productIds[0] = 20; productIds[1] = 30; productIds[2] = productIds[0] * productIds[1]; cout << "数组占的字节数:" << sizeof productIds << endl; cout << "数组长度:" << sizeof productIds / si原创 2021-04-17 17:59:56 · 199 阅读 · 0 评论 -
c++ 中初始化、 自动类型转换、强制类型转换、auto关键字
初始化1. 与C语言兼容的初始化方式 int n = 20; int m = 30; int k = n +m -50; int x; x = n - m;2. C++不同于C语言的初始化方式 float price(30.2);3. C++ 98的初始化方式 int count = {20}; count = {400};4. C++ 11的初始化方式 int day{20}; int year{};自动类型转换1. 将一个值赋原创 2021-04-15 12:12:44 · 697 阅读 · 0 评论 -
c++ 基础数据类型
1. 整型有符号整型类型字节数最大值最小值short162^15 -1 (32767)-2^15(-32768)int322^31 -1-2^31long32位系统: long = int , 32; 64位系统: 6432位系统: 2^31 -1; 64位系统: 2^63 -132位系统:- 2^31; 64位系统: -2^63long long642^63-1-2^63无符号整型类型字节数最大值最小值s原创 2021-04-14 21:57:10 · 319 阅读 · 0 评论 -
c++ char*, char[], string相互转换
c++ char*, char[], string相互转换char[] 转 char*char ch[]="abcdef";char *s = ch;char* 转 char[]strcpy()char *s="abcdef";char ch[100];strcpy(ch,s);循环赋值char arr[20];char* tmp = "helloworld";int i = 0;while (*tmp != '\0') arr[i++] = *tmp++;arr[i] =原创 2021-03-31 20:28:01 · 35593 阅读 · 4 评论 -
c++ 命名方法
c++ 命名方法1. 大驼峰命名法又名pascal(帕斯卡)命名法,每个单词首字母大写示例: StudioName2. 小驼峰命名法第一个单词首字母小写,其余单词首字母大写示例: studioName3. 下划线命名法字母全小写,使用下划线连接示例: studio_name4. 匈牙利命名法HN命名法基本原则是:变量名=属性+类型+对象描述其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分(1) 属性:g_ 全局变量c_ 常量m_ c+原创 2021-03-30 21:15:35 · 1367 阅读 · 0 评论