C++
文章平均质量分 57
宗浩多捞
仅供参考 + 仅供参考 + 仅供参考,或有差错,愿闻指教。宜查官方之文档,或阅纸质之典籍:)
感谢每次点赞、收藏、批评、指点
展开
-
C++多线程环境中进行内存分配跟踪的接口类设计(全局重载new/delete操作符)
操作符,实现堆区空间的分配和释放的跟踪记录。原创 2024-01-23 13:50:03 · 421 阅读 · 0 评论 -
C++的一些零散小知识
想到看到就记录一下原创 2023-12-24 03:17:35 · 409 阅读 · 0 评论 -
C++17 inline静态变量,静态变量不用再类内定义类外初始化了
并且这个表达式还是constexpr,从而可以在编译时进行求值,提供更好的优化。然后再在其他任何.cpp文件中包含MyClass.h文件,使用。而在 C++17 引入的标准中,你可以直接在类中定义并初始化。这使得静态成员变量的定义和初始化。原创 2023-12-24 02:16:25 · 633 阅读 · 0 评论 -
C++ 侵入式智能指针实现原理
mutable用于修饰类的成员变量,表示该成员变量可以在被标记为 const 的成员函数内修改。原创 2023-12-23 20:48:44 · 445 阅读 · 0 评论 -
VS Code + MinGW 搭建 Windows C++开发环境以及如何简单根据CMake维护的项目生成.sln文件
这是Visual Stuidio(IDE)用的编译器,在VSCode中,如果选择MSVC作为编译器,结果就是生成一个对应VS版本的.sln解决方案,后面就不说了吧 用Visual Studio 2022 打开就行。必须掌握的技能,目前github上开源项目几乎都采用CMake来维护,不会使用则寸步难行,学会CMake之后,其他的构建工具都简简单单,比如Premake。,并指定调试相关配置属性,比如调试的目标可执行文件,调试采用的调试器路径等。,这是C/C++插件默认帮我们生成的,必须有这个文件才能编译。原创 2023-12-20 23:26:19 · 2202 阅读 · 0 评论 -
cmake中的configure_file() 和option()命令
cmake中的configure() 和option()命令的作用域问题。原创 2023-12-15 17:19:03 · 560 阅读 · 0 评论 -
C++17折叠表达式(Fold Expressions)
1原创 2023-11-20 19:30:46 · 214 阅读 · 0 评论 -
C++11 模板参数包(Parameter pack)
Template parameter pack(模板参数包)是C++中用于接受零个或多个模板参数的一种机制原创 2023-11-20 18:43:28 · 221 阅读 · 0 评论 -
C++11 constexpr 常量表达式应用场景
C++11 引入的一个特性,是一种关键字,用于指示表达式或函数可以在**编译时**求值。原创 2023-11-14 02:07:47 · 374 阅读 · 0 评论 -
C++11 原始字符串字面量R“()“
`R"()"`是C++11引入的一项特性,它允许创建**不需要转义字符**的字符串字面量。字符串中包含特殊字符、换行符和其他转义字符时,**不需要反斜杠**转义它们。原创 2023-11-14 01:32:40 · 509 阅读 · 0 评论 -
C++11 initializer_list 轻量级初始化列表的使用场景(让自定义类可以用初始化列表来初始化内部STL容器)
`initializer_list` 是 C++11 中的一个特性,它允许你使用花括号 `{}` 中的值列表来初始化**容器或数组**。通常用于初始化标准库容器,比如 `std::vector`、`std::set`、`std::map` 以及`数组`。原创 2023-11-03 15:14:54 · 963 阅读 · 0 评论 -
关于git推送代码到github远程仓库中文乱码问题,visual studio保存文件默认编码格式问题
当你用GB2313格式保存一个文件,用utf-8的编码格式打开,它必然就显示乱码。据我所知,github上面是utf-8,而visual studio默认保存为GB2312,把代码推送到github上面看,中文部分就是乱码。原创 2023-10-29 13:55:05 · 1248 阅读 · 1 评论 -
C++std::function和std::bind()的概念
在某些情况下,你可以将它们结合使用,例如,如果你想创建一个可调用对象,该对象包含绑定的参数,然后将其存储在 std::function 中。延迟参数绑定:你可以使用std::bind在创建std::function对象时部分绑定参数,然后稍后再提供其余的参数。灵活性:结合使用std::function和std::bind可以让你更容易地操作和传递可调用对象。减少代码冗余:如果你需要多次调用具有相同部分绑定的可调用对象,结合使用std::function和std::bind可以减少重复的绑定代码。原创 2023-09-05 18:18:30 · 240 阅读 · 0 评论 -
C++中stringstream多类型数据拼接和提取用法
使用` std::stringstream `将整数、双精度浮点数和字符串连接到一个字符串中,这充分展示了其通用性。原创 2023-09-03 16:52:30 · 419 阅读 · 0 评论 -
C++中的##、#符号含义
在C++中,## 和 # 是两个不同的预处理符号。这些符号都是在C++的预处理阶段使用的,用于在代码编译之前对文本进行操作。原创 2023-09-03 16:17:53 · 2622 阅读 · 0 评论 -
如何使用premake维护一个C++项目
使用 Premake,开发者可以通过编写简单的 Lua 脚本来描述项目的结构和构建选项,Premake 会根据这些脚本生成特定平台(如 Windows、Linux、Mac 等)的项目文件和构建脚本,例如 Visual Studio 的 .sln 文件、Makefile 或 Xcode 的 .xcodeproj 文件等。,列出了所有预定义的变量,供我们使用,用法类似于vs中项目设置里的宏(ProjectDir 、SolutionDir、ProjecName等等),不同的地方是vs中取值用。原创 2023-03-21 16:55:02 · 752 阅读 · 0 评论 -
静态成员变量为什么只能在类外初始化?如何手动控制静态成员变量的初始化时机?
如果允许在类内部初始化,就可能会导致在每个实例中都有一个独立的副本(每实例化一个对象时,成员变量都会进行一次初始化(或于构造函数中,或于原位进行初始化),因此会造该静态变量成每个实例不同。因此,为了确保静态成员变量在整个程序中都有唯一的、确定的初始化值,必须在类的定义外部进行初始化。避免多次初始化: 如果静态成员变量允许在类内部初始化,每个编译单元(源文件)都可能有自己的初始化值。,因为静态成员变量属于整个类,而不是类的特定实例。这与普通的实例变量有所不同,实例变量是每个类的实例独有的,因此可以在。原创 2023-08-31 13:08:58 · 1714 阅读 · 3 评论 -
动态链接库的__declspec(dllexport)关键字的概念
当其他程序想要使用 DLL 中的函数时,它们需要使用动态链接库加载机制(在Visual Studio中为添加依赖项)来加载 DLL,并通过函数名来获取函数的地址,然后调用函数。简化使用: 通过提供一个高层次的调用函数,您可以将复杂的算法细节抽象出来,使外部程序可以更简单地使用这个功能,而不需要了解底层的具体步骤。信息隐藏: 通过只公开少数必要的接口,您可以隐藏底层的实现细节,从而降低了外部程序对 DLL 内部结构的依赖。在 Windows 操作系统下,创建一个动态链接库(DLL)项目时,您需要通过。原创 2023-08-29 19:09:22 · 836 阅读 · 0 评论 -
静态链接库和动态链接库的区别
C++静态链接库(Static Linking)和动态链接库(Dynamic Linking)的主要区别在于代码的组织和加载方式。原创 2023-08-29 02:09:25 · 749 阅读 · 0 评论 -
静态成员函数与普通成员函数的区别,什么时候用静态函数比较好?
总之,成员函数主要用于操作对象实例的状态,而静态成员函数则更像是与类本身相关的功能函数。静态成员函数不依赖于对象实例,因此它们在某些情况下更具有通用性和效率。原创 2023-08-25 12:09:33 · 1384 阅读 · 0 评论 -
C++中类的内存结构
这种机制使得我们可以使用成员函数来操作对象的数据,并且每个对象不需要存储自己的函数指针,因为函数的代码只有一份,它在类的定义中被声明,而实际的函数调用是通过 this 指针来关联到正确的对象的。相反,所有类的实例共享相同的成员函数代码。成员函数的代码在编译后被存储在其他地方,比如可执行文件的代码段中。,编译器在编译阶段就确定了要调用具体该函数,生成对应的函数调用指令,直接指向要调用的函数的地址。,它们被定义在类的声明中,但是它们的实际代码通常存储在程序的代码段,而不是实例对象的内存中。原创 2023-08-25 12:03:55 · 125 阅读 · 0 评论 -
C++中的变参宏 #define MyMacro(...)(__VA_ARGS__)
在定义宏时,VA_ARGS 表示可变参数列表中的所有参数。在宏展开时,VA_ARGS 将被替换为实际传递给宏的参数列表。,其中 VA_ARGS 表示实际传递给宏的所有参数。这使得宏可以处理不同数量的参数,使得代码更加灵活。在调用宏时,可变参数列表中的。类似于这样的宏定义,括号里是…时,可变参数列表中的两个参数被传递给。是预处理器宏的一个特殊标识符,它表示。它们允许在宏中使用不定数量的参数。原创 2023-03-21 14:51:37 · 339 阅读 · 0 评论 -
C++中类的静态、常量、引用成员变量的初始化
这是因为类内的声明只是描述了类的成员变量和成员函数的类型,而,因此需要在类外以分配内存空间。这样,myStaticVar 就被分配了内存空间。注意,定义时不能使用static关键字,否则会导致编译错误。当然最好是在声明的时候直接赋予初值否则没有赋予初值的话,一般还要定义一个静态成员函数Init()来做初始化但是需要注意的是,静态成员变量只能被初始化一次,因此需要确保在整个程序中只有一次初始化。原创 2023-03-21 14:08:49 · 751 阅读 · 0 评论 -
VS2017 + QT5.14.2 + VTK9.2的简单示例代码
主要是能跑通就行,细节不重要。原创 2022-08-23 15:19:38 · 1111 阅读 · 0 评论 -
Visual Stdio中使用番茄插件智能提示功能出问题。头文件也没有智能提示,甚至iostream都无法补全
我在网上没有搜到同类型问题的解决办法,这个问题绝大部分人都不会遇到吧,不过我遇到了- - 问了大佬,也不知道什么原因。原创 2022-08-22 13:36:10 · 782 阅读 · 1 评论 -
Visual studio(VS)中的(int argc、char** argv)命令行参数
有些程序需要输入命令行参数,一种方式在命令行中cd到exe的文件目录下,输入命令行参数。原创 2022-07-25 20:11:02 · 3091 阅读 · 2 评论 -
Visual Studio中多个源文件、多个main()函数如何分开运行
应该对初学者有丢丢帮助吧,虽然很简单的东西,但是还是想分享一下啦原创 2022-07-06 12:57:56 · 9940 阅读 · 5 评论 -
C语言函数alloca()在栈上分配内存
众所周知,C++在创建数组时,尺寸指定必须是个常数,不能是变量,比如:int length = 100;char message[length]; // error动态分配方式在堆区构造数组,之后要手动释放// C++char* message = new char[100]; delete [] message;// Cchar* message = (char*)malloc(100*sizeof(char))free(message);利用alloca()栈区动态分配\qua原创 2022-05-11 13:36:39 · 2050 阅读 · 0 评论 -
C++三线性插值代码实现
已知目标点C周围8个整数点的某个属性值,欲求出内部O点的值需要做7次一维线性插值4次线性插值得到I、J、K、LI、J、K、LI、J、K、L2次线性插值得到M、NM、NM、N1次线性插值得到OOO设(O−A)=(u,v,w)(O-A) = (u,v,w)(O−A)=(u,v,w), u v w 就相当于权重I=A+u(B−A)J=D+u(C−D)K=H+u(G−H)L=E+u(F−E)I = A + u(B-A)\\J = D + u(C-D)\\K = H+u(G-H)\\L=E+u.原创 2022-04-26 12:53:08 · 3371 阅读 · 0 评论 -
C++ static_cast相同父类的子类之间强制转换(子类A的指针转换成子类B)(Ray Tracing the next week 中BVH部分遇到的问题)
万恶之源:hittable_list world = static_cast<hittable_list>(make_shared<bvh_node>(world, 0, 1));本文只讨论手段是否能通过编译,是否应该这样做、有无必要这样做 不是讨论的重点目录1、static_cast能够实现父类指针和子类指针相互转换2、尝试把子类A的指针转到子类B (失败)3、把子类A的指针转到子类B (成功)1、static_cast能够实现父类指针和子类指针相互转换这是众所周知原创 2022-04-25 21:01:42 · 2062 阅读 · 0 评论 -
【Cherno C++】63、C++计时器的使用
C++11特性关键库文件:<chrono><chrono><chrono>一般用法#include <iostream>#include <chrono>#include <thread>int main(){ using namespace std::literals::chrono_literals //休眠1s中的s,必须使用这个空间 auto start = std::chrono::high_resolut原创 2022-04-17 18:52:24 · 1000 阅读 · 0 评论 -
C++ strtok_s() 分割字符串
函数原型char* strtok_s( char* str, const char* delimiters, char** context );//指向字符串的指针用法#include <string.h>#include <stdio.h>char string1[] ="A string\tof ,,tokens\nand some more tokens";char string2[] = "Another string\n\tparsed翻译 2022-03-29 22:42:35 · 738 阅读 · 0 评论 -
vs中的,C++断点调试时“逐语句、逐过程、跳出“的含义
断点快捷键F9:在光标停留处打断点逐语句(F11):每次执行一行代码,遇到函数调用,则跳转到该函数的函数体继续每行执行。逐过程(F10):每次执行一行代码,碰到函数调用,不跳入函数体内部,当成一行代码过掉。跳出(Shift+F11):在函数内部执行时,可省略函数内剩余代码执行过程,直接跳出函数体,回到函数调用处代码的下一行。vs2010中的图标就很形象第一个(逐语句):会进入函数体内部第二个(逐过程):跳过函数内部执行过程第三个(跳出):跳出函数...原创 2021-12-09 15:06:39 · 2842 阅读 · 1 评论