![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
C++语法等知识
wjfdsklfdkfksd
这个作者很懒,什么都没留下…
展开
-
C++11引入的原始字符串字面量与普通字符串字面量的区别
在C++中,R"(C:\temp\my_file.ext)"和"C:\temp\my_file.ext"之间有一个重要的区别。因此,R"(C:\temp\my_file.ext)"和"C:\temp\my_file.ext"的主要区别在于,前者是。在处理文件路径时,使用原始字符串字面量可以避免处理转义字符的麻烦。原始字符串字面量,不会对反斜杠进行转义。原创 2023-11-15 18:06:55 · 241 阅读 · 0 评论 -
大小端模式的判断代码
【代码】大小端模式的判断代码。原创 2023-11-01 19:38:41 · 130 阅读 · 0 评论 -
move old_folder/ new_folder和 move old_folder new_folder
对于你提到的两个命令,mv old_folder/ new_folder和mv old_folder new_folder,它们实际上是不同的。mv old_folder/ new_folder:这个命令将在当前目录下将名为"old_folder"的文件夹移动到名为"new_folder"的文件夹中。如果"new_folder"不存在,那么它将被创建。mv old_folder new_folder:这个命令将在当前目录下将名为"old_folder"的文件夹重命名为"new_folder"。原创 2023-09-07 16:39:36 · 71 阅读 · 0 评论 -
关于unordered_map中元素的插入顺序与遍历顺序问题
最近做一个项目遇到一个问题困扰我两天,差点自闭。经排查是。原创 2023-09-07 12:44:05 · 807 阅读 · 0 评论 -
依赖模板参数来访问成员函数模板
【代码】依赖模板参数来访问成员函数模板。原创 2023-08-19 17:48:06 · 40 阅读 · 0 评论 -
模板编程-嵌套依赖
【代码】模板编程-嵌套依赖。原创 2023-08-19 17:32:55 · 40 阅读 · 0 评论 -
类模板的成员函数模板
【代码】类模板的成员函数模板。原创 2023-08-19 17:19:34 · 48 阅读 · 0 评论 -
类类模板的模板参数并不限于类型参数,普通数值也可以作为模板的参数
【代码】类类模板的模板参数并不限于类型参数,普通数值也可以作为模板的参数。原创 2023-08-19 17:05:54 · 66 阅读 · 0 评论 -
局部特化-特化部分参数
【代码】局部特化-特化部分参数。原创 2023-08-19 16:52:48 · 43 阅读 · 0 评论 -
模板编程-成员特化
成员特化:类模板特化除了可以对整个类进行特化外,可以只针对某部分成员函数进行特化。全类特化和成员特化都属于全局特化。原创 2023-08-19 16:48:27 · 92 阅读 · 0 评论 -
全类特化:特化该类模板所有的成员函数
【代码】全类特化:特化该类模板所有的成员函数。原创 2023-08-19 16:41:51 · 90 阅读 · 0 评论 -
类模板的递归实例化
【代码】类模板的递归实例化。原创 2023-08-19 16:23:19 · 54 阅读 · 0 评论 -
类模板的静态成员不是每个对象拥有一份 //也不是类模板拥有一份,而是由类模板实例化出的每一个真正的类各有一份,且为该实例化定义 的所有对象共享
【代码】类模板的静态成员不是每个对象拥有一份 //也不是类模板拥有一份,而是由类模板实例化出的每一个真正的类各有一份,且为该实例化定义 的所有对象共享。原创 2023-08-19 15:28:11 · 47 阅读 · 0 评论 -
模板编程-某些类型虽然并没有提供类模板所需要的全部功能但照样可以实例化类模板,只要不调用那些未提供功能的成员函数即可
不调用add就能编译过。原创 2023-08-19 15:18:20 · 87 阅读 · 0 评论 -
在程序中如何判断该线程的线程id(get_id())的返回值是一个无效值
可以通过 `std::thread::id` 的成员函数 `std::thread::id::operator==()` 来判断一个 `std::thread::id` 是否是一个空值。如果一个 `std::thread::id` 对象与默认构造的 `std::thread::id` 对象相等,那么该 `std::thread::id` 对象就是一个空值。`std::thread::id()` 是`std::thread::id`的默认构造函数,它会创建一个空的`std::thread::id`对象。原创 2023-08-06 16:26:42 · 197 阅读 · 0 评论 -
stdexcept和exception,两个头文件的区别?
2. 异常处理:stdexcept中定义了一些标准异常类,例如logic_error和runtime_error等,它们是由用户定义的异常类继承而来的。而exception是一个基本的异常类,通常用户可以继承exception来定义自己的异常类。而exception中的异常类型可以是任何用户自定义的类型,用户可以根据自己的需要定义异常类型。4. 继承关系:stdexcept中的异常类是按照继承关系组织起来的,所有的标准异常类都继承自exception类。原创 2023-08-06 15:33:29 · 229 阅读 · 0 评论 -
如何理解线程可以共享地址空间?
这种共享的地址空间可以方便地在多个线程之间共享数据,但同时也需要小心处理并发问题,如竞态条件和数据竞争。为了确保线程安全,必须使用同步机制(如互斥锁、条件变量等)来保护共享的数据,以防止多个线程同时修改同一个内存地址而导致不可预测的结果.在C++中,线程共享地址空间是指在多线程编程中,所有线程都可以访问相同的内存地址。因此,一个线程对内存的修改可能会影响其他线程对相同内存的访问。原创 2023-07-25 15:09:03 · 278 阅读 · 0 评论 -
C++获取时间戳 微秒级
getMicroTimestamp用来获取微秒级时间戳,formatTimeStamp用来格式化输出时间格式。原创 2023-07-24 15:27:11 · 803 阅读 · 0 评论 -
关于计算机中的“race condition“的解释
竞争条件(race condition)是指当多个线程或进程同时访问或修改共享资源时,最终的执行结果受到每个线程执行的顺序或时间差异的影响,从而导致程序出现不正确的行为或结果。这种情况下,各个线程之间的执行顺序是不确定的,无法可靠地预测各个操作的完成顺序。因此,出现竞争条件时,程序的行为可能与单线程下的预期结果不一致。"竞争条件"这个词可以被翻译为"race condition",但为了更好理解,可以使用 "并发冲突" 这个词组。原创 2023-07-18 19:15:05 · 148 阅读 · 0 评论 -
线程独占数据和共享的数据有哪些?
需要注意的是,线程间共享的数据需要进行同步操作,以保证数据的一致性和正确性,否则可能会发生竞争条件导致数据错误或者不可预料的结果。同时,在设计和开发多线程应用时,需要谨慎处理共享数据和私有数据的访问和修改,以避免引发线程安全问题。4. 栈帧:每个线程的函数调用时会生成一个栈帧,用于存储函数的参数、返回地址等信息。2. 栈空间:每个线程都有自己独立的栈空间,存储函数调用时的参数、局部变量等信息。3. 寄存器:每个线程都有自己独立的寄存器,用于存储临时变量和计算结果等。原创 2023-07-18 19:06:33 · 1569 阅读 · 0 评论 -
变量生命符thread_local
thread_local是c++11为引进的变量声明符。是一个所谓存储器指定符,其作用类似命名空间,指定了变量名的存储期以及链接方式。staticexternmutable:对象的存储在线程开始时分配,而在线程结束时解分配。每个线程拥有其自身的对象实例。唯有声明为 thread_local 的对象拥有此存储期。thread_local 能与 static 或一同出现,以调整链接。打印结果:每个线程都拷贝了一份两个线程共享一个全局变量,最终结果打印为101;原创 2023-07-15 17:31:47 · 189 阅读 · 0 评论 -
函数后加const的作用
表示函数不可以修改类中的成员!相当于这个函数是一个只读函数!一旦我们想要改变类成员的值便会报错!1、提高了代码的可读性,别人看到你这个就知道你这个函数没有改变类成员。首先要明确一点,函数后面加const只能是类的。2、提高代码的可靠性,若想改变改变则会报错。,普通函数是无法加const的。原创 2023-07-15 10:01:41 · 348 阅读 · 0 评论 -
noexcept关键字解析
使用noexcept表明函数或操作不会发生异常。如果noexcept函数向外抛出了异常,程序会直接终止,该函数内部会调用std::abort()终止程序。原创 2023-07-15 09:50:44 · 303 阅读 · 0 评论 -
左值和右值
在C++中所谓的左值一般是指一个指向的具有名称的值(),它有一个相对稳定的内存地址,并且有一段。而右值则是的(不具名对象),它的生命周期很短,通常是的。基于这一特征,我们可以用取地址符&来判断左值和右值,能取到内存地址的值为左值,否则为右值。原创 2023-05-18 22:38:26 · 231 阅读 · 0 评论 -
auto(C++11~C++17)
C++11标准赋予了auto的含义:声明变量时根据初始化表达式自动推断该变量的类型、声明函数时函数返回值的占位符。原创 2023-05-18 19:02:42 · 90 阅读 · 0 评论 -
内联命名空间
内联命名空间能够把空间内函数和类型导出到父命名空间中,这样即使不指定子命名空间也可以使用其空间内的函数和类型了.示例代码中只能有一个,否则编译时会造成二义性问题,编译器不知道使用哪个内联命名空间的foo函数。原创 2023-05-18 17:59:46 · 73 阅读 · 0 评论 -
都2023年了, 你还傻傻的分不清utf-8,utf-16,utf-32和unicode?
UTF-32是一种定长编码方式,使用4个字节表示一个Unicode字符,每个字符使用相同的存储空间,因此UTF-32编码方式在处理Unicode字符时比较方便,但是在存储空间上比UTF-8和UTF-16都浪费。在计算机中,所有的信息都是以二进制的形式存储的,而字符集就是将二进制数值映射到具体的字符上的一种方式。总体来说,UTF-8适合在存储空间有限的情况下使用,UTF-16适合在处理Unicode字符时比较方便的情况下使用,UTF-32适合在需要高效处理Unicode字符的情况下使用。原创 2023-05-18 17:30:13 · 536 阅读 · 0 评论 -
静态库和动态库
https://blog.csdn.net/wucz122140729/article/details/105112237原创 2023-05-14 17:07:54 · 27 阅读 · 0 评论 -
window如何使用静态库
mylib.cpp中的内容。原创 2023-05-12 15:13:00 · 160 阅读 · 0 评论 -
promise future承认给你美好的未来?
C++11提供了异步操作相关的类,主要有std::future,std::promise和std::package_task.原创 2023-05-12 11:49:15 · 334 阅读 · 0 评论 -
call_once/once_flag的使用
在多线程环境下保证某个函数近被调用一次。原创 2023-05-11 22:54:08 · 39 阅读 · 0 评论 -
Fixed traits 萃取
萃取 并不是一种具体的技术,更像一种编程思想。主要用于模板中的模板参数。这种模板一般称traits模板.从boots库中发展而来,实现了类型信息的提取和变换。固定萃取-fixed traits。值萃取-value traits。原创 2023-05-11 09:49:50 · 32 阅读 · 0 评论 -
智能指针之weak_ptr
【代码】智能指针之weak_ptr。原创 2023-05-09 23:17:14 · 88 阅读 · 0 评论 -
智能指针shard_ptr
/原因是:enable_shared_from_this类中有一个weak_ptr,这个weak_ptr是用来观测this指针的,调用shared_from_this()//2 通过shared_from_this()返回this指针,不要将this指针作为shared_ptr返回出来。//通过派生enable_shared_from_this,并且使用shared_from_this()方法来返回。//shared_from_this来返回this的shared_ptr。//3.获取原始指针。原创 2023-05-09 23:15:25 · 382 阅读 · 0 评论 -
bind适配器
在消息队列和网络库的框架中,当接收到消息(报文)时,回调用户自定义的函数对象,把消息(报文)参数传给它,由它决定如何处理。,是用一个可调用对象及其参数,生成一个新的可调用对象,以适应模板。std::bind模板函数是一个通用的。应用场景二:回调函数的实现。应用场景一:可变函数与参数。原创 2023-05-07 22:31:54 · 28 阅读 · 0 评论 -
C++之虚函数原理
注意说的是对象。C++中的对象存储方式是每个对象占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数属于公共部分。原创 2023-05-06 17:13:20 · 973 阅读 · 0 评论 -
多态的原理
有了虚函数,会在类的对象增加一个指针,该指针就是虚函数表指针_vfptr;;子类继承父类的虚表指针时,是对父类的虚表指针进行了拷贝。二者指向两张不同的表。子类没有重写父类的虚函数时候,子类的虚函数表和父类是完全一样的。如果子类重写了基类中某个虚函数,用派生类自己的虚函数地址覆盖虚表中的基类的虚函数地址。派生类自己新增的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。多态的原理:基类的指针或者引用指向谁就去用谁的虚函数表找到对应的虚函数进行调用。原创 2023-05-06 17:05:15 · 871 阅读 · 0 评论 -
处理日期和时间的 chrono 库
C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利。。原创 2023-05-06 16:16:06 · 809 阅读 · 0 评论 -
C++11
另外,我们也可以给类编写相应的移动构造函数(T::T(T&& another))和和具有移动语义的赋值函数(T&& T::operator=(T&& rhs)),在构造对象和赋值的时候尽可能的进行资源的重复利用,因为它们都是接收一个右值引用参数。override 关键字确保在派生类中声明的重写函数与基类的虚函数有相同的签名,同时也明确表明将会重写基类的虚函数,这样就可以保证重写的虚函数的正确性,也提高了代码的可读性,和 final 一样这个关键字要写到方法的后面。,并不是原来的类型了。原创 2023-05-06 14:23:51 · 993 阅读 · 0 评论 -
C++11预定义宏
预定义标识符对于轻量级的调试代码具有十分重要的作用。而在C++11中,标准甚至允许其使用在类或者结构体中。我们可以看看下面这个例子。用于指示本行语句在源文件中的位置信息。用于指示本行语句所在源文件的文件名。原创 2023-05-06 10:01:27 · 74 阅读 · 0 评论