CPP中volatile关键字介绍
简介 volatile 意为:不稳定的,易变的。该关键字用于提醒编译器它所修饰的变量的值会时刻改变。通常我们不会经常使用该关键字修饰变量,那么这个时候为了优化IO性能,程序可能会从该变量的寄存器中取值而不会从它的内存地址取值,因为访问寄存器的性能快过ram,但如果数据会频繁变化,寄存器中的值和该变量的内存地址中的值就并不一定完全相同,这样就会导致数据不一致,容易出现问题,且难以发现。
用法volatile <data-type> <var-name>;
volatile int a = 0;
示例 比如我想用整形变量定义一个flag,而该flag会一直变化,当达到某个条件会断开循环,如果不加volatile关键字,就容易导致数据不一致,循环可能不会像预期的那样运行
1234567#include <iostream>int flag = 0;int main(){ while(flag != 0){ func1(); } func2(); return 0;}
1234567# ...
C++和C语言之动态内存
C++重要概念1、栈内存函数内部声明的变量占用的内存
2、堆内存程序未使用的内存,可用于动态分配内存
动态内存程序在运行时动态分配内存,有时我们不知道我们需要分配多少内存,而是到了运行时才能知道,这时就需要动态分配内存,而其它的分配方式叫静态分配内存。面对需求灵活性高的程序,动态内存的地位极为重要。
若需要查看应用场景示例,请在本文右侧导航栏跳转至“应用场景”。
正题new 和 delete 运算符new 运算符用于为变量申请内存,其格式为
1<var-name> = new <data-type>;
例:
12char *c[];c = new char[20];
即为char指针变量c申请缓冲区大小为20个字节的内存空间,如果在实际开发中,数据大小超过了该缓冲区就会导致缓冲区溢出报错。
还有第二种用法:
1int *num = new num();
写了括号但不写其值,这种用法即是开辟一个内存空间并初始化为0
delete 运算符delete 运算符通常用于将已经使用完了的内存或不用的内存释放,根据需求合理释放内存是一个很好的习惯,不及时释放内存在小型项 ...
CPP中thread多线程库简单使用
C++ 11后引入的新 thread库使用引入:
123#include <thread>using namespace std; //或者直接使用std::thread//...
具体用法:
123std::thread thread_object(_Fn &&_Fx, _Args**..._Ax);//第一个参数是函数指针或函数对象也可以是lambda表达式//第二个参数的函数的参数,若没有可以不填
示例普通函数示例1234567891011121314151617181920212223242526#include <iostream>#include <thread>using namespace std;//...void func1(int a){ for(int i = 0; i < a ; i++){ cout<< a << endl; } }void func2(int b){ for(int i = 0 ...
Bullet物理引擎环境配置
一、添加附加依赖项123..\..\lib\BulletDynamics_vs2010_debug.lib..\..\lib\BulletCollision_vs2010_debug.lib..\..\lib\LinearMath_vs2010_debug.lib
位于:<项目属性页> —— <链接器> —— <输入> —— <附加依赖项>
填写你自己的lib文件夹路径位置而不是直接原封不动复制上面的东西
二、添加附加包含目录打开你下载的Bullet的目录,里面会有src文件夹,添加src文件夹的绝对路径即可,大概长这样:
1X:\..\Bullet\src
位于:<项目属性页> —— <C/C++> —— <常规> —— <附加包含目录>
添加你的src文件所在路径即可
三、调试设置位于:<项目属性页> —— <C/C++> —— <代码生成> —— <运行库>
将 运行库 改为 多线程调试(/MTd)
关于配置OpenGL开发环境时遇到的问题
无法解析的外部符号 glfwxxx右键 [项目解决方案] -> [属性] -> [链接器] -> [输入] -> [附加依赖项] -> 添加glfw3.lib 或 glfw3_mt.lib
无法解析的外部符号 gladLoadGLLoader将glad/src/glad.c直接丢进工程就行
使用VSQT遭遇乱码时的解决方案
文件乱码遇到这种情况,需要调整文件保存方案,将文件改为UTF-8带签名,具体操作如下:
首先打开“工具”选项卡,再点击“自定义”
之后单击“命令”选项卡,再单击“添加命令”
下拉“类别”列表框,找到“文件”并选中
在右侧列表下滑找到“高级保存选项”并点击,然后再点击确定即可
此时会发现左上角出现了“高级保存选项”,但是是灰色,这时我们只需要点击一次需要更改保存格式的代码区域即可。
点击代码的任意区域后,会发现选项已经变亮,就可以开始进行设置,设置完成后,文件名称后会有星号,此时别忘记对文件进行Ctrl+S保存。
QT命令行和界面输出乱码造成这种情况解决办法不唯一,但是可以一个一个试,总是可以试出来的,以下给出一些解决思路。
添加以下预编译头(注意添加的位置,最好是在头文件内)
另外,该预编译头只支持VS环境,非VS环境无效。下面两个代码块可以任意选一个,一个不行试另一个。
123#ifdef Q_OS_WIN#pragma execution_character_set("utf-8")#endif
123#if _MSC_VER > ...






