![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 64
qq_27898413
这个作者很懒,什么都没留下…
展开
-
现代C++之万能引用、完美转发、引用折叠FrancisFrancis
在 Java 里,数字等原生类型是值类型,类则属于引用类型。因为有两种类型的引用 (lvalue references 和 rvalue references),那"引用的引用"就有四种可能的组合: lvalue reference to lvalue reference, lvalue reference to rvalue reference, rvalue reference to lvalue reference, 以及 rvalue reference to rvalue reference。原创 2024-01-30 22:00:53 · 381 阅读 · 0 评论 -
在C / C ++中,__FUNCTION__,__func__、__PRETTY_FUNCTION__和__FUNCSIG__的作用及区别
官方C99标准为此目的定义的__func__标识符,确实值得大家关注,然而,ISO C++却不完全支持所有的C99扩展,因此,大多数的编译器提供商都使用 __FUNCTION__ 取而代之,而 __FUNCTION__ 通常是一个定义为 __func__ 的宏,之所以使用这个名字,是因为它已受到了大多数的广泛支持。在最新的ISO C标准中,如大家所知的C99,加入了另一个有用的、类似宏的表达式__func__,其会报告未修饰过的(也就是未裁剪过的)、正在被访问的函数名。该宏用于获取当前函数的名称。原创 2023-03-27 07:46:27 · 3294 阅读 · 0 评论 -
coturn源码之宏UNUSED_ARG
#include <stdio.h>#define UNUSED_ARG(A) do { A=A; } while(0)void Hello(int key,int value){ printf("key:%d\n",key);}int main(){ Hello(100,200); return 0;}#include <stdio.h>#define UNUSED_ARG(A) do { A=A; } while(0).转载 2021-07-20 21:13:16 · 292 阅读 · 0 评论 -
c++中new简单总结 及 深入理解
本文一共两部分: 目录 1.C++中的new用法总结 2.深入C++的new 简单的可以先看第一部分总结1.C++中的new用法总结(1)new operator这个就是平时最经常用的new,用法如下程序所示:class A{public: A(int i) :a(i){}private: int a;};int main(){ A* example = new A(1);}new operator实际上执...原创 2021-07-19 02:42:36 · 1063 阅读 · 0 评论 -
C++中Struct与Class的区别与比较
概述之前只知道在C++中类和结构体的区别只有默认的防控属性(访问控制)不同,struct是public的,而class是private的。但经过上网查资料才发现,除了这个不同之外,还有很多的知识点需要掌握。下面就听我一一道来~1、首先比较一下C中的结构体和C++中的结构体区别C++中的struct是对C中的struct进行了扩充,所以增加了很多功能,主要的区别如下图所示:上面罗列了在声明时的区别,在使用的过程中也有区别:在C中使用结构体时需要加上struct,或者对结构体使用ty..转载 2021-08-12 18:21:01 · 103 阅读 · 0 评论 -
重载new, delete
C++里允许用户通过自定义operator new的方式来更改new表达式的行为,这给了程序员定制内存管理方案的自由。但是享受这种自由的时候必须遵守一定的规范,具体可以参见 《Effective C++ 2nd》的相关条款。本文补充解释一些特别容易引起误解的问题。 operator new和operator delete都有其正规形式(normal signature):void* operator new(size_t size);void operator delete(void *p);...原创 2021-07-20 22:01:38 · 162 阅读 · 0 评论 -
using的三种用法
1、命名空间的使用一般为了代码的冲突,都会用命名空间。例如,对于Android代码会使用Android作为命名空间。namespace android;在code中使用的时候可以用android::加具体的类方法。 也可以直接使用 using namespace android;这样可以直接使用 命名空间 android 下的方法 类型 成员2、在子类中引用基类的成员class T5Base {public: T5Base() :value(55) {} ...原创 2021-07-18 23:29:42 · 1432 阅读 · 0 评论 -
STL set的比较函数
set对比较函数是有要求的,不是只要返回bool就行1)a<b&&b<c能推出a<c2)定义a==b为!(a<b)&&!(b<a),那么a==b&&b==c能推出a==c3)a==a为真(即a<a为假...原创 2021-08-03 21:18:26 · 204 阅读 · 0 评论 -
C++纯虚函数定义
有时候,基类中的虚函数是为了派生类中的使用而声明定义的。此类函数我们叫做纯虚函数,不需要写成空函数的形式,一般只需要声明成: virtual 函数类型 函数名(形参表列)=0;最后面的“=0“并不代表函数返回值为0,只是形式上的作用,告诉编译系统”这是纯虚函数”; 这是一个声明语句,最后应有分号。但是,不代表此函数不能定义,下面转载的文章说明了对纯虚函数定义和调用的方式看代码时时无意看到代码里某类的纯虚函数居然有实现,吓我一跳,果真学无止境啊!在此转载相关文...原创 2021-07-11 21:58:45 · 755 阅读 · 0 评论 -
InitializeCriticalSectionAndSpinCount以及InitializeCriticalSection的区别
InitializeCriticalSectionAndSpinCount和InitializeCriticalSection 都是临界区的一种初始化,可是前者多了dwSpinCount参数,这个参数的作用是在进入临界区的时候CPU自选计数为什么要引用这个参数呢?在EnterCriticalSection调用这个参数,如果线程无法获取临界区则会进行睡眠,则CPU则进行线程环境上下切换,这个切换大概需要几千个CPU周期,并且争夺的线程都会调用开销昂贵的WaitForsingleObject,而.原创 2021-07-20 21:34:54 · 219 阅读 · 1 评论 -
模板类声明和实现必须全部写在头文件里面?c++
在VS中新建TheC++StandardLibrary项目,在test测试tie的功能,将测试函数声明在test.h文件,实现放到test.cpp文件,编译时提示错误:fatal error LNK1120: 1 个无法解析的外部命令百度时才注意到,这是一个模板分离编译问题,知乎上的回答:链接:https://www.zhihu.com/question/20630104/answer/15722407来源:知乎C++中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正.原创 2021-07-18 23:01:19 · 613 阅读 · 0 评论 -
C++中mutable关键字的作用
C++ 里的 mutable 有两种作用。类中的mutablemutable 从字面意思上来说,是「可变的」之意。若是要「顾名思义」,那么这个关键词的含义就有些意思了。显然,「可变的」只能用来形容变量,而不可能是「函数」或者「类」本身。然而,既然是「变量」,那么它本来就是可变的,也没有必要使用 mutable 来修饰。那么,mutable 就只能用来形容某种不变的东西了。C++ 中,不可变的变量,称之为常量,使用 const 来修饰。然而,若是 const mutable 联用,未免让人摸.原创 2021-05-29 01:50:20 · 479 阅读 · 0 评论 -
C++ 内存分配(new,operator new)详解
本文主要讲述C++ new关键字和operator new, placement new之间的种种关联,new的底层实现,以及operator new的重载和一些在内存池、STL中的应用。一. new operator 和 operator newnew operator:指我们在C++里通常用到的关键字,比如A* a = new A;operator new:它是一个操作符,并且可被重载(类似加减乘除的操作符重载)关于这两者的关系,我找到一段比较经典的描述(来自于www.cplusplus..转载 2021-07-20 22:41:09 · 3292 阅读 · 1 评论 -
网上有对于C++编程要避免使用cin、cout、fstream;而是使用scanf、printf、FILE *的说法, 请问是正确的吗?
https://www.zhihu.com/question/24456451/answer/650654590原创 2021-08-08 16:42:11 · 112 阅读 · 0 评论 -
iostream/fstream中的输入输出流指针的绑定,tie函数的使用
为了兼容c语言的输入输出,c++里面采用tie将输入输出流经行绑定,所以cin/cout并不是独立的。当执行cin时,cout同时会被执行。反之亦然。by defalut,cin is tied to cout,and wcin is tied to wcout。默认情况下,cin和cout是绑定在一起的,wcin和wcout是绑定在一起的。也就是说默认情况下,我们执行 int a; cin>>a; 用户输入abcd'Enter'执行的过程是,先将a.转载 2021-08-08 16:31:56 · 466 阅读 · 0 评论 -
C++中rdbuf()简介及文件流的概念
#include <cstring>#include <iostream>#include <fstream>#include <sstream>using namespace std; //****************个人对流操作中<<和>>符号的理解********************///// 可以这么认为:可以根据<< 或 >>箭头的方向来理解流的过程./// 比如..原创 2021-08-08 16:35:53 · 2664 阅读 · 0 评论 -
关于友元函数在类内定义的问题
我们平常使用友元函数都仅是在类内部声明,在类外定义,今天看到了一个在类内定义的例子,就产生了好奇,把自己的总结记录下来;先看例子class T { public: T(); ~T(); //不引入类对象 friend void show_hello_no_param() { std::cout << "show_hello_no_param() of T : Hello world!\n"; } //引入类对象 friend void s.原创 2021-09-28 19:21:42 · 1764 阅读 · 2 评论 -
C++中为什么析构函数是虚函数
如果基类的析构函数不是虚函数,在特定情况下会导致派生来无法被析构。情况1:用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构情况2:用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。为什么会出现这种现象呢,个人认为析构的时候如果没有虚函数的动态绑定功能,就只根据指针的类型来进行的,而不是根据指针绑定的对象来进行,所以只是调用了基类的析构函数;如果基类的析构函数是虚函数,则析构的时候就要根据指转载 2021-09-05 19:42:03 · 140 阅读 · 0 评论 -
关于qt中的tr()函数
在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:(1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种: (2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包) (2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包) 注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么,这是个信号:你在误用tr 你需要的是Q转载 2021-09-02 17:32:47 · 169 阅读 · 0 评论 -
关于解引用*和箭头操作符->的重载
这里以一个智能指针类为例,智能指针所指为一个对象。而事实上,STL迭代器的开发均需要重载这两个操作符,上一篇文章分析STL 迭代器中除了要用到template技巧外,还需要重载技巧#include<iostream>using namespace std;class Screen{public: friend ostream& operator<<(ostream&os, Screen &s); int action(){原创 2021-08-31 16:02:03 · 135 阅读 · 0 评论 -
C++14_std::shared_mutex的用法
C++11中的互斥量互斥量 说明 std::mutex 独占的互斥量,不能递归使用 std::timed_mutex 有超时功能的独占互斥量,不能递归使用 std::recursive_mutex 递归互斥量,能递归使用 std::recursive_timed_mutex 有超时功能的递归互斥量 C++14中引入std::shared_mutexstd::shared_mutex用于管理可转移和共享所有权的互斥对象,适用场景比较特殊:一个或多个读线转载 2021-08-20 19:10:14 · 1581 阅读 · 1 评论 -
c++中typename和class的区别介绍
"typename"是一个C++程序设计语言中的关键字。相当用于泛型编程时是另一术语"class"的同义词。这个关键字用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名。 学习C++的人对class这个关键字都非常明白,class用于定义类。在模板引入c++后,最初定义模板的方法为: template<class T>......在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了转载 2021-08-13 15:42:17 · 1075 阅读 · 0 评论 -
C++中的纯虚函数 继承问题
抽象类不能定义对象和纯虚函数继承的问题https://help.ubuntu.com/6.10/ubuntu/packagingguide/C/basic-scratch.html http://topic.csdn.net/t/20040907/14/3348197.html http://zhidao.baidu.com/question/185750284.html?push=ql转载于:https://www.cnblogs.com/zhangze/archive/2010/12/28/19转载 2021-08-11 16:00:25 · 493 阅读 · 0 评论 -
C++中tuple类型
tuple是C++11新标准里的类型。它是一个类似pair类型的模板。pair类型是每个成员变量各自可以是任意类型,但是只能有俩个成员,而tuple与pair不同的是它可以有任意数量的成员。但是每个确定的tuple类型的成员数目是固定的。tuple容器(元组), 是表示元组容器, 是不包含任何结构的,快速而低质(粗制滥造, quick and dirty)的, 可以用于函数返回多个返回值;tuple容器, 可以使用直接初始化, 和"make_tuple()"初始化, 访问元素使用"get<&g原创 2021-07-25 03:30:01 · 9303 阅读 · 0 评论