c/c++/c++11
c/c++/c++11
980205
这个作者很懒,什么都没留下…
展开
-
linux gdb 不捕获SIGPIPE信号的方法
By default, gdb captures SIGPIPE of a process and pauses it. However, some program ignores SIGPIPE. So, the default behavour of gdb is not desired when debugging those program. To avoid gdb stopping in SIGPIPE, use the folloing command in gdb:原创 2023-08-16 16:19:33 · 400 阅读 · 0 评论 -
C++ 左值引用和右值引用
引用类型的变量,在定义时需要赋初值,且不能用NULL 赋初值。const 右值引用只能绑定右值,但不能绑定左值。const 左值引用可以绑定左值和右值。左值引用只能绑定左值。右值引用只能绑定右值。原创 2023-05-20 23:20:20 · 94 阅读 · 0 评论 -
event_base_loopbreak() 调用问题
【代码】event_base_loopbreak() 调用问题。原创 2023-05-15 18:58:40 · 211 阅读 · 0 评论 -
iterator,reverse_iterator,const_iterator,const_reverse_iterator使用
正向迭代器:iterator ,用begin,end反向迭代器:reverse_iterator,用rbegin,rend常量正向迭代器:const_iterator常量反向迭代器:const_reverse_iterator原创 2022-11-20 14:32:26 · 323 阅读 · 0 评论 -
C++ std::is_convertible模板用法及代码示例
<type_traits>头文件中提供了C++ STL的std::is_convertible模板。 C++ STL的std::is_convertible模板用于检查是否可以将任何数据类型A隐式转换为任何数据类型B。它返回布尔值true或false。头文件:#include<type_traits>模板类别:template< class From, class To >struct is_convertible;template<..转载 2021-10-08 10:36:45 · 2905 阅读 · 0 评论 -
c++11 auto和decltype结合使用
C++11还引入了一个叫做尾返回类型(trailing return type),利用 auto 关键字将返回类型后置:template <typename T, typename U>auto add(T x, U y) -> decltype(x+y) { return x+y; } c++14之后不需要,直接template <typename T, typename U>auto add(T x, U y){ return原创 2021-09-15 17:44:31 · 182 阅读 · 0 评论 -
Linux查看程序性能方法
1.查看进程的内存分析while true; do pmap -d 3066 | tail -1; sleep 2; done2.查看某个线程的情况给线程取名字#include <sys/prctl.h>prctl(PR_SET_NAME, "thread-name");top -Htop 再敲13. dstat命令查看可以查看所有的实时系统资源--total-cpu-usage-- -dsk/total- -net/total- ---paging-- --..原创 2021-08-02 15:03:03 · 449 阅读 · 0 评论 -
template, using用法
//方法一template <typename T>struct map_s{ typedef std::map <std::string, T> map;}map_s<int>::map map1;map1.insert({"key", 1});//方法二template <typename T>using map_s = std::map<std::string, T>;map_s<int> ma.原创 2021-07-28 09:07:31 · 866 阅读 · 0 评论 -
通过获取当前时间毫秒
struct timeval now; gettimeofday( &now, nullptr ); int64_t nowMillisecond = ((int64_t)now.tv_sec)*1000; nowMillisecond += (int64_t)(now.tv_usec)/1000;原创 2021-06-17 15:37:33 · 944 阅读 · 0 评论 -
c++ 递归锁
递归锁RECURSIVE_MUTEX的原理以及使用标签:Multi_ThreadRecursive_Mutex递归锁的作用MutexLock mutex; void foo() { mutex.lock(); // do something mutex.unlock(); } void bar() { mutex.lock(); // do something foo(); mut...转载 2021-03-30 15:52:57 · 5422 阅读 · 0 评论 -
std::chrono::steady_clock 实现精准休眠
#include <iostream>#include <chrono>#include <thread>#include <ratio>#include <cstdlib>class timer{ typedef std::chrono::steady_clock::time_point tp; //typedef std::chrono::duration<double> dd.原创 2021-01-28 13:57:15 · 2995 阅读 · 1 评论 -
c++11-17 模板核心知识(八)—— enable_if<>与SFINAE
c++11-17 模板核心知识(八)—— enable_if<>与SFINAE引子 使用enable_if<>禁用模板 enable_if<>实例 使用Concepts简化enable_if<> SFINAE (Substitution Failure Is Not An Error) SFINAE with decltype 引子class Person {private: std::string name;public:转载 2021-01-15 18:10:46 · 1175 阅读 · 1 评论 -
c++11禁止用某个模板的方法 ,结合std::enable_if 实现
使用场景:有多个构造函数,也同时用模板实现了一个可变参数的构造函数,现在想分别调用不同的构造函数,但可变参数构造函数不加条件,则所有初始化都会调用此可变参数构造函数,因此在某些条件下应该禁止此可变参数的构造函数,现在模板结合std::enable_if实现。std::enable_if的作用可以网上找相关说明,下面是c++11禁止用某个模板的方法,本例子可以主要对可变参数的模板实现代码实现:#include <type_traits>#include <iostr.原创 2021-01-15 13:29:20 · 674 阅读 · 0 评论 -
无法打开文件“libboost_thread-vc141-mt-gd-1_69.lib“的解决办法
Visual Studio 2017 配置Boost库,如何编译和选择,遇到无法打开文件“libboost_thread-vc141-mt-gd-1_69.lib“的解决办法...1,到官网下载boost,www.boost.org 这里我下载的1-69版本.2,安装,解压后运行bootstrap.bat文件。稍等一小会就OK。3,编译boost库。注意一定要使用VS2017的x86本机工具命令提示,这个可以在VS2017的安装菜单里面找到。进入命令行提示,输入下面的内容:bjam .转载 2020-10-08 10:08:37 · 3216 阅读 · 0 评论 -
linux makefile 一些用法
用途说明 创建静态库。a文件。用C/C++开发程序时经常用到,但我很少单独在命令行中使用ar命令,一般写在makefile中,有时也会在shell脚 本中用到。关于Linux下的库文件、静态库、动态库以及怎样创建和使用等相关知识,参见本文后面的相关资料【3】《关于Linux静态库和动态库的分析》。 常用参数 格式:ar rcs libxxx.a xx1.o xx2.o 参数r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar.转载 2020-09-17 14:32:58 · 1781 阅读 · 0 评论 -
Valgrind memcheck 用法
Valgrind memcheck 用法Valgrind是一组调试(debugging)和剖析(profiling)工具的集合。memcheck是其中应用最广泛的一个,它检查内存有关的问题,包括诸如内存访问越界、内存泄露等。1. 使用步骤1.1 编译程序-g:使用这个选项产生符号信息。这样Valgrind产生的报告中会显示的代码位置是源代码的位置,否则Valgrind只能猜函数名。 -fno-inline:不使用这个选项,Valgrind报告的调用栈可能让人迷惑。如果是编译debug版本,转载 2020-08-26 16:52:12 · 970 阅读 · 0 评论 -
C++11 std::forward和std::move
std::forward<T>(u)有两个参数:T 与 u。当T为左值引用类型时,u将被转换为T类型的左值,否则u将被转换为T类型右值。如此定义std::forward是为了在使用右值引用参数的函数模板中解决参数的完美转发问题。std::move是无条件的转为右值引用,而std::forward是有条件的转为右值引用,更准确的说叫做Perfect forwarding(完美转发),而std::forward里面蕴含着的条件则是Reference Collapsing(引用折叠)。std:原创 2020-08-19 09:19:25 · 330 阅读 · 0 评论 -
Linux下使用CMake进行编译的时候寻找Boost库
Linux下使用CMake进行编译的时候寻找Boost库find_package通过调用find_package可以找到头文件和所需要的库文件或者是一个CMake打包配置文件,find_package(Boost [version] [EXACT] # 可选项,最小版本或者确切所需版本 [REQUIRED] # 可选项,如果找不到所需库,报错 [COMPONENTS <libs>...] # 所需的库名称,比如说. "date_t.转载 2020-08-18 18:27:25 · 2894 阅读 · 0 评论 -
gdb 调试
-g 参数可以做到这一点2. br: 设置断点br filename:line_numbr namespace::classname::func_name3. n: 单步跳过 s: 单步进入4.finish:执行到函数retun返回5. list: 列出当前位置之后的10行代码;list line_number: 列出line_number之后的十行代码6. bt(backtrace):列出调用栈7. info locals:列出当前函数的局部变量8. p v...原创 2020-08-18 18:13:39 · 134 阅读 · 0 评论 -
error while loading shared libraries: libboost_thread.so.1.74.0: cannot open shared object file: No
error while loading shared libraries: libboost_thread.so.1.74.0: cannot open shared object file: No./nthread.t: error while loading shared libraries: libboost_thread.so.1.74.0: cannot open shared object file: No such file or directory解决方法:sudo l..原创 2020-08-18 17:17:41 · 1878 阅读 · 0 评论 -
C++11 typedef typename 理解
为什么使用typename关键字那么问题来了,为什么要加上typename关键字?typedef std::vector<T>::size_type size_type;//why not?实际上,模板类型在实例化之前,编译器并不知道vector<T>::size_type是什么东西,事实上一共有三种可能:静态数据成员静态成员函数嵌套类型那么此时typename的作用就在此时体现出来了——定义就不再模棱两可。总结所以根据上述两条分析,type转载 2020-08-17 09:47:49 · 746 阅读 · 0 评论 -
C++11 std::chrono::duration
[原]C++新标准之std::chrono::duration原总结C++11chronodurationratio 概览 std::chrono::duration 描述 类定义 duration_cast()分析 预定义的duration 示例代码 参考资料 概览c++新标准提供了新的线程库,最近在写测试代码的时候需要让当前线程休眠,之前直接调用windows提供的Sleep()就好了,新标准中可以使用std::this_...转载 2020-08-14 15:42:44 · 2355 阅读 · 0 评论 -
C++函数返回值是 unsigned
live555很多这种函数返回unsignedunsigned RTSPServer::registerStream(ServerMediaSession* serverMediaSession, char const* remoteClientNameOrAddress, portNumBits remoteClientPortNum, responseHandlerForREGISTER* responseHandler, char const* .原创 2020-08-14 08:35:56 · 725 阅读 · 0 评论 -
C++11智能指针学习笔记
shared_ptr<int> makes(int value) { shared_ptr<int> p2 = make_shared<int>(100); shared_ptr<string> p3 = make_shared<string>("hello"); shared_ptr<int> p4 = make_shared<int>(); p4 = make_shared<int...原创 2020-07-31 21:20:20 · 184 阅读 · 0 评论 -
C++ signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT等等的说明)
原文:https://blog.csdn.net/u014470361/article/details/83591513SIGHUP /* hangup */ ~~~~~~SIGHUP,hong up ,挂断。本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。 ~~~~~~登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运...转载 2020-06-20 11:40:54 · 8049 阅读 · 0 评论 -
C++ 多进程,父进程监控子进程
LINUX C:创建与监控多个子进程#include <unistd.h>#include <sys/types.h>#include <stdlib.h>#include <signal.h>#include <stdio.h>//子进程个数#define SUB_PRO_COUNT 10//处理子进程的退出信号void sub_quit_signal_handle(int sig);//父进程的事件循环vo...转载 2020-06-20 11:35:30 · 2527 阅读 · 0 评论 -
c++11单例模式
#include <iostream>#include <memory>#include <mutex>class Singleton {public: static Singleton& GetInstance() { if (!instance_) { std::lock_guard<std::mutex> lock(mutex_); if (!instance_) { instance原创 2020-06-04 10:15:40 · 235 阅读 · 0 评论 -
c++ delete 和 delete[]
释放的是内置类型int *p = new int[2];//释放delete p, 和用delete[] p 效果都可以正常释放内存;释放的是没有析构函数的对象类型class A{public: A(){ } //~A(){ // //}};A *pA = new A[2]();//如果没有析构函数,这里就分配2个字节内存,2个字节代表类对象数组占用的;假如有析构函数,则分配6字节,2个字节代表类对象数组占用的,额外4字节则是代表数..原创 2020-06-14 18:30:12 · 6722 阅读 · 0 评论 -
c/c++面试题目
//a) 一个整型数( An integer) int a; //b) 一个指向整型数的指针( A pointer to an integer) int *b; //c) 一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an integer) int **c; //d) 一个有 10 个整型数的数组( An array of 10 integers) int d[10]; //...原创 2020-06-09 19:42:04 · 446 阅读 · 0 评论 -
C++ class和struct的区别?
C++ class和struct的区别?C++ 中保留了C语言的struct关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!!#include <iostream>using namespace std;struct A{public:转载 2020-06-04 15:31:13 · 168 阅读 · 0 评论 -
C++11 可变模版参数的妙用--泛化之美
原文地址:https://www.cnblogs.com/qicosmos/p/4325949.html1概述C++11的新特性--可变模版参数(variadictemplates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以它也是C++11中最难理解和掌握的特性之一。虽然掌握可变模版参数.转载 2020-05-21 16:59:39 · 1473 阅读 · 0 评论 -
c++11 std::promise介绍及使用
std::promise介绍及使用一、std::promise介绍std::promise是C++11并发编程中常用的一个类,常配合std::future使用。其作用是在一个线程t1中保存一个类型typename T的值,可供相绑定的std::future对象在另一线程t2中获取。二、代码示例:下面我们通过几个简单小例子逐渐深入了解std::promise的使用方法。示例1:#include <iostream>#include <future>#in转载 2020-05-21 16:15:19 · 2760 阅读 · 0 评论 -
C++11封装线程池(2)
先上代码,代码来自GitHub。这段代码用了大量C++ 11新特性,并且非常晦涩难懂,接下来会对每个细节逐个解释。ThreadPool.h#ifndef THREAD_POOL_H#define THREAD_POOL_H#include <vector>#include <queue>#include <memory>#include <thread>#include <mutex>#include <condit转载 2020-05-21 15:24:25 · 1261 阅读 · 0 评论 -
C++11实现线程池(1)
什么是线程池线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程池原理预先创建预定数量的线程,将多个任务加入到任务队列。类似于生产者消费者,多个线程相当于消费者,一个任务队列充当生产者。当任务队列被塞入任务时,线程们就去竞争这些任务,但每.转载 2020-05-21 15:16:25 · 384 阅读 · 0 评论 -
c++11 vector中push_back和emplace_back的区别
原文:https://blog.csdn.net/xiaolewennofollow/article/details/525593641、两者区别 在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。 引入了右值引用,转移构造函数(请看这里)后,push_back()...转载 2020-05-20 14:43:49 · 2451 阅读 · 0 评论 -
c++ public和protected,private区别
原创 2020-05-16 08:59:32 · 1282 阅读 · 0 评论 -
c++11 using作用
c++11 using的作用1.引用命名空间,例如:using namespace std;2.可以让基类同名函数在派生类可见,假如想通过派生类来调用基类的重载函数,则可以用using来实现, 子类调用父类的重载函数//父类:class Parent{public: void xxfunc();//父类的函数,不带参 void xxfunc(int);//带1参 void xxfunc(int,int);//带2参 void xxfunc(int,int原创 2020-05-16 09:34:17 · 287 阅读 · 0 评论 -
c++ class 类名 和 include 的区别
A.hclass A{public: B* m_;}这样会编译出错,因为B没有定义#include "B.h"class A{public: B* m_;}但是这样,一旦B的定义修改,那么A.h也就会重新编译,导致所有用到A.h的文件也需要重新编译,这样就造成了编译依赖,增加了编译的时间,在大型项目中,如果很多这样的地方的话,甚至可能极度增加编译时间。为了避免这种情况,我们可以这么做 用 class B;A.hclass B;class A{...转载 2020-05-15 15:17:20 · 260 阅读 · 0 评论 -
C++中基类的析构函数为什么要用virtual虚析构函数
知识背景 要弄明白这个问题,首先要了解下C++中的动态绑定。 关于动态绑定的讲解,请参阅: C++中的动态类型与动态绑定、虚函数、多态实现正题 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情...转载 2020-05-15 10:48:55 · 289 阅读 · 0 评论 -
C++:shared_ptr简介以及常见问题
本文中的shared_ptr以vs2010中的std::tr1::shared_ptr作为研究对象。可能和boost中的有些许差异,特此说明。基本功能shared_ptr提供了一个管理内存的简单有效的方法。shared_ptr能在以下方面给开发提供便利:1、 使用shared_ptr能有效的解决忘记释放内存带来的内存泄漏问题。同时通过自定义删除器功能还能广泛的用于任何需要”释放”的资源管理。2、 利用weak_ptr和shared_ptr搭配使用能解决一部分由于重复释放导致的野指针问题.转载 2020-05-13 14:59:23 · 662 阅读 · 0 评论