
c++
文章平均质量分 53
zhangpeterx
这个作者很懒,什么都没留下…
展开
-
一次失败的尝试:paxosstore示例编译
本来想编译paxosstore的example,没想到最终还是失败了。git clone https://github.com/Tencent/paxosstore.gitcd paxosstorecd certaingit submodule update --init --recursive先安装go:apt install golang #debian/ubuntuyum i...原创 2019-07-28 15:11:41 · 475 阅读 · 0 评论 -
C++编译器会对没有构造函数的类生成默认构造函数吗?
之前在上C++的课的时候,印象中有那么一句话:如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数今天在看《深度探索C++对象模型》的第二章:“构造函数语意学”的时候发现之前听到的说法是错误的。比如说如下代码:class A {public: int a;};int main(void) { A a; a.a = 4; A a2; ...原创 2019-10-27 12:19:33 · 4031 阅读 · 4 评论 -
C++的类什么时候需要虚析构函数
在看《C++沉思录》的时候,看到这段话:2018版-第4章-类设计者的核查表-第40页什么时候类需要虚析构函数?1.不会用作基类的类是不需要虚析构函数。2.如果会使用基类指针并delete,那么需要使用虚析构函数,即使类里没有任何成员函数,否则delete会产生内存泄漏书里提到的这件事情我之前没有注意过,于是写了测试代码如下:class A { int a;};cla...原创 2019-10-25 09:46:09 · 1290 阅读 · 0 评论 -
Linux查看可执行文件的各个段:.BSS,.TEXT,.DATA的大小
有时候用gcc编译完程序,想看一下程序的各个段code segment/text segment:.TEXTInitialized Data Segment:.DATAUninitialized Data Segment:.BSS分别占用了多少空间。使用命令size:-> % size a.out text data bss dec hex...原创 2019-10-21 09:22:09 · 5823 阅读 · 0 评论 -
C++: 不可拷贝(noncopyable)类
C++很多时候会使用拷贝构造函数,但你却没有意识到,如:class A {public: int _a; A(int __a) { _a = __a; }};A func(A a) { A a1(a); return a1;}func函数在入参和返回时都调用了默认的拷贝构造函数: A(const A &othe...原创 2019-10-19 22:07:26 · 1205 阅读 · 0 评论 -
CLion使用WSL的cmake报错解决: configure_file Problem configuring file Call Stack (most recent call first):
今天想用WSL的cmake,结果刚使用的时候就报错如下:/usr/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /mnt/c/Users/peter/CLionProjects/untitled6CMake Error at /usr/share/cmake-3.10/Modules/CMakeDeter...原创 2019-10-19 20:32:51 · 4077 阅读 · 5 评论 -
rocksdb报错解决:librocksdb.a(format.o): In function `Zlib_Uncompress':
在使用rocksdb的时候遇到了报错:build64_release.rep125/my_kv/rocksdb-6.1.2/librocksdb.a(format.o): In function `Zlib_Uncompress':/home/xxx/rocksdb-6.1.2/./util/compression.h:723: undefined reference to `inflateI...原创 2019-08-12 14:07:13 · 1118 阅读 · 0 评论 -
C++调用openssl使用sha256,并取结果前64位作为uint64
参考:unix - Generate sha256 with OpenSSL and C++ - Stack Overflow代码如下:#include "openssl/sha.h"#include <string>#include <iostream>using namespace std;inline uint64_t sha256(const strin...原创 2019-08-12 16:44:14 · 2651 阅读 · 0 评论 -
C++ 常用技巧
文章目录1.派生类实现的父类虚函数后加上关键字 override 表示重载。2.class内的函数打出函数名和类名3.C++多线程detach--后台线程1.派生类实现的父类虚函数后加上关键字 override 表示重载。参考:c++11 - virtual? override? or both? C++ - Stack Overflow如果重载失败,会在编译时报错,这样解决了自己以为重载了...原创 2019-08-19 20:16:44 · 271 阅读 · 0 评论 -
C++ 随机数生成的2种方法--生成指定范围内的随机数
第一种是传统的方法:#include <iostream>using namespace std;int main() { srand(NULL); for (int i = 0; i < 100; i++) { cout << rand() << ' '; } return 0;}这种方法比...原创 2019-08-19 17:59:05 · 7891 阅读 · 0 评论 -
rocksdb批量删除指定前缀的key或者查找指定前缀开始的key
wiki:DeleteRange · facebook/rocksdb Wiki批量删除指定前缀的key原先的做法:Slice start, end;// set start and endauto it = db->NewIterator(ReadOptions());for (it->Seek(start); cmp->Compare(it->key(), ...原创 2019-08-07 21:19:57 · 4614 阅读 · 0 评论 -
C++报错解决:what(): basic_string::_S_construct null not valid
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_S_construct null not valid出现这个错误是因为用空指针初始化string,比如说:string str(NULL); string str2(nullptr); ...原创 2019-08-13 21:27:27 · 7538 阅读 · 0 评论 -
CLion报错解决:allocating an object of abstract class type--unimplemented pure virtual method
在用CLion写代码时遇到了这个报错:allocating an object of abstract class type '...'unimplemented pure virtual method '...' in '...'这个报错的意思是派生类有没有实现的虚函数,所以是抽象类。我感觉这个报错有问题,因为我的派生类已经实现了父类的虚函数。然后我想到一件事:在函数后加上关键字ov...原创 2019-08-08 17:58:38 · 4465 阅读 · 0 评论 -
Debian/Ubuntu--blade安装与使用
仓库地址:chen3feng/blade-build: A powerful build system from Tencent, support many mainstream programming languages, such as C/C++, java, scala, python, protobuf…先自己安装python2或者python3,然后安装scons:sv=3.1.0...原创 2019-07-28 15:35:19 · 3150 阅读 · 1 评论 -
C++ map的使用
文章目录使用插入更新比较2个map是否相同最近在学C++,想到Python中有字典,dictionary;C++中叫map,跟Java中的名字一样。使用想使用std::map,需要先#include <map>。使用方法如下:#include <map>int main(void){ std::map<int,int> my_map={{1,...原创 2019-08-05 20:05:00 · 502 阅读 · 0 评论 -
报错解决:error: this statement may fall through [-Werror=implicit-fallthrough=]
下午在编译 grpc时报错如下:utilities/blob_db/blob_log_reader.cc:74:18: error: this statement may fall through [-Werror=implicit-fallthrough=] next_byte_ += kb_size; ~~~~~~~~~~~^~~~~~~~~~utilities...原创 2019-07-24 19:22:03 · 31614 阅读 · 2 评论 -
报错解决: error: ‘writev’ was not declared in this scope
下午在编译paxosstore时报错如下:-> # g++ -O0 -g2 -DCERTAIN_DEBUG=0 -std=c++11 -I./ -I./src/ -I./include/ -I./third/protobuf/src -I./third/libco -I./third/googletest/googletest/include -I./third/grpc/include...原创 2019-07-24 19:33:46 · 3830 阅读 · 0 评论 -
报错解决: error: this use of "defined" may not be portable
在编译grpc的时候报错如下:[HOSTCXX] Compiling src/compiler/cpp_generator.ccIn file included from third_party/protobuf/src/google/protobuf/stubs/common.h:45:0, from include/grpc++/impl/codegen/...原创 2019-07-25 10:29:41 · 2629 阅读 · 0 评论 -
C/C++ 头文件 #pragma once vs #ifndef
C/C++ 头文件防止被重复包含有2种常用的做法,一种是传统的ifndef:#ifndef HEADER_H#define HEADER_H...#endif // HEADER_H另一种是稍微新一些的pragma once:#pragma once...远古gcc版本不支持pragma once–gcc 3.4之前的版本不支持pragma once,也就是2006年前的g...原创 2019-07-30 14:10:25 · 1558 阅读 · 0 评论 -
make 操作技巧指南--gcc版本设置
很多时候我们的机器上会安装多个版本的gcc,但默认的gcc并不一定指向我们想要的gcc版本。如果gcc版本太低,会报错:cc1plus: 错误:无法识别的命令行选项“-std=c++11”cc1plus: 错误:无法识别的命令行选项“-std=c++11”cc1plus: 错误:无法识别的命令行选项“-std=c++11”如果版本太高,warning很可能会变成error,如:thi...原创 2019-07-25 13:14:11 · 9485 阅读 · 0 评论 -
Debian/Ubuntu/Centos下编译安装RocksDB
参考:rocksdb/INSTALL.md at master · facebook/rocksdb注意:gcc版本至少要4.8,安装教程:在CentOS/Debian/Ubuntu上编译安装最新版 GCC 8 , cmake 3 和ninjaDebian/Ubuntu操作如下:apt install libsnappy-dev zlib1g-dev libbz2-dev liblz4-de...原创 2019-07-22 16:23:43 · 4250 阅读 · 3 评论 -
VS 2019 查看类图 UML 图
1.安装最新版本的VS 2019默认是不安装类图查看器的,需要在Visual Studio Installer中进行安装。勾选Visual Studio扩展开发,选择右面的类设计器安装完成后就可以使用了。2.使用新建项目,代码如下:class A {};class A2 {};class B :public A {};class C :public A2 {};class D...原创 2019-07-31 15:21:57 · 34934 阅读 · 8 评论 -
debian/ubuntu 安装和使用perf
debian操作如下:apt install linux-perfroot@VM-73-203-debian:~# perf --versionperf version 4.9.168ubuntu操作如下:apt update && apt upgradeapt-get install linux-tools-common linux-tools-generic l...原创 2019-08-05 18:12:09 · 8415 阅读 · 0 评论 -
C++ 调试技术:addr2line
最常用的调试C++程序的方法是使用IDE,,比如说vs,clion。打断点,debug模式跑。稍微先进一点的是使用gdb进行调试。gdb调试使用到的技术就比较多了,以后详细介绍。今天看到一个神奇的命令addr2line,这个命令可以在程序 core dump的时候告诉你程序在哪一行出错。示例代码如下:int main(void) { char *str; /* Stor...原创 2019-08-21 16:43:16 · 2020 阅读 · 0 评论 -
C++ CORE DUMP gdb 调试
先查看内存转储的大小限制:ulimit -c返回的结果是以512 bytes为单位的。如果没有返回结果,说明设置为0,需要进行手动设置:ulimit -c unlimited测试代码:#include <stdio.h>void foo(){ int *ptr = 0; *ptr = 7;}int main(){ foo(); r...原创 2019-08-21 20:14:37 · 777 阅读 · 0 评论 -
C++ 面试题:子类与父类同名变量
今天面试时被问到C++的子类与父类有同名变量时,C++会如何处理。示例代码如下:class A {public: int a; A(){ a=0; }};class B:public A{public: int a; B(){ a=0;}};int main() { A* a=new B(); a->a=1; B* b...原创 2019-09-24 21:44:14 · 1775 阅读 · 0 评论 -
C++报错解决:error: ‘int’ is not a class, struct, or union type typedef typename _Sequence::value_
我在使用C++的时候,遇到了如下报错:-> % g++ test.cppIn file included from /usr/include/c++/7/queue:64:0, from test.cpp:5:/usr/include/c++/7/bits/stl_queue.h: In instantiation of ‘class std::que...原创 2019-09-13 12:38:22 · 6618 阅读 · 0 评论 -
C++预编译头文件 bits/stdc++.h
有时候会看到别人包含这样的头文件:#include "bits/stdc++.h"这个头文件中有很多预先包含的头文件,内容如下:// C++ includes used for precompiling -*- C++ -*-// Copyright (C) 2003-2018 Free Software Foundation, Inc.//// This file is part...原创 2019-09-11 10:33:33 · 1047 阅读 · 0 评论 -
C++排序算法
文章目录数组排序递减排序数组排序#include <algorithm>static const size_t v_size = 2000;int v[v_size];// Fill the array by valuesstd::sort(v,v+v_size); 或者#include <algorithm>int main(){ int v[20...原创 2019-09-10 18:29:49 · 98 阅读 · 0 评论 -
Windows使用MSVC,命令行编译,链接64位dll,Python调用
前一篇博客:Windows下使用Visual Studio自带的MSVC,命令行编译C/C++程序SampleDLL.cpp代码如下:// SampleDLL.cpp#define EXPORTING_DLL#include "sampleDLL.h"BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call,...原创 2019-09-07 11:11:42 · 2406 阅读 · 0 评论 -
C++多线程:Linux 线程通信,唤醒,互斥锁(未完待续)
c++ multi thread message sending and notify线程通信常用的方法有共享内存和消息传递,推荐使用消息传递。最常用的就是管道了,可以使用匿名管道或者命名管道。匿名管道使用示例如下:命名管道就需要你在操作系统上创建一个真实的管道文件,具体做法就不展示了。说道管道有一个问题,那就是多个生产者和消费者的时候,如何通知消费者。这里就涉及到线程间的唤醒操作...原创 2019-09-02 22:04:00 · 1461 阅读 · 0 评论 -
C++ 协程介绍[译]
此文翻译自:COROUTINES INTRODUCTION在很长时间的争论,反对和准备后,WG21(ISO C++ Committee) 统一了在C++20中coroutines (协程)的具体实现。这是一个巨大的feature,我们需要提前学习。有很多人反对这个特性,很多人抱怨协程很难懂以及性能可能不是最佳–动态内存分配没有优化(possibly原创 2019-08-29 15:09:50 · 3990 阅读 · 0 评论 -
C++ 汇编代码查看
文章目录gcc 编译为汇编代码使用 as 展示汇编代码使用 objdump 进行反汇编使用 godbolt 可视化结果gcc 编译为汇编代码原始C++代码如下:#include "stdio.h"class Animal {public: virtual void name() { printf("I'm Animal\n"); }};class Cat : public...原创 2019-08-28 15:26:48 · 8282 阅读 · 2 评论 -
《C++语义和性能分析》读书笔记
页数:203字数:287千字版次:2017年11月第一版阅读完成日期:2019-8-23今天看完了这本书:《C++语义和性能分析》,这本书挺薄的,只有200面,花费了我1天半的时间把书完整的看了一遍。书里第一章介绍C++背景的内容感觉是最值得看的一章,讲到了C++的一些设计思路,还是对我有些帮助。书里主要讲的内容是C++的继承,多态。讲的内容算是比较基础的,但也没有对基础的内容特别深...原创 2019-08-28 11:42:24 · 403 阅读 · 0 评论 -
C++ 虚函数个人理解
C++中的虚函数指的是class类中加上了关键字virtual的函数。虚函数的意义在于动态绑定,也就是说父类指针可以调用子类的函数实现,示例如下:#include "stdio.h"class Animal {public: virtual void name() { printf("I'm Animal\n"); }};class Cat : public Animal ...原创 2019-08-27 19:29:55 · 329 阅读 · 0 评论 -
C++ 内存泄漏检测:valgrind和AddressSanitizer
推荐使用工具valgrind,安装:sudo apt install valgrind #debian/ubuntu内存泄漏示例代码如下:/* code with memory leak */#include <stdio.h> #include <stdlib.h> int main(void) { int *ptr = (int*)malloc...原创 2019-08-27 14:32:32 · 1431 阅读 · 0 评论 -
Windows和Linux的C/C++ IDE选择
在Windows上写C++,对于C++初学者,我推荐Dev-C++。Windows上进行C++开发,自然会提到Visual Studio,但我用vs比较少,不好提建议。之前有段时间我会用sublime写C++代码,比较sublime的高亮看起来很舒服。现在我也在使用CLion,CLion的缺点是只支持cmake,但是自动补全功能真的好用。CLion不自带gcc,需要你自己安装,参考这篇教程...原创 2019-08-22 10:29:00 · 1183 阅读 · 0 评论 -
面试必备的C++知识(未完待续)
C++ 内存管理C++中内存分为5个部分:堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:函数中的局部变量存在栈上,在函数结束后自动释放空间。栈空间比较有限。堆:堆是new class存放的地方,需要我们手动delete进行空间的释放。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局/静态存储区:全局变量和静态变量被分...原创 2019-08-27 12:14:06 · 186 阅读 · 0 评论 -
Qt5.10.1在Windows平台下进行静态编译
本文最后更新于2018-6-20,可能会因为没有更新而失效。如已失效或需要修正,请联系我!Qt静态编译的最大好处就是可以直接产生能够不依靠多余的dll运行的exe文件,而且exe文件会比动态编译的要小上很多。1.下载源码静态编译的第一步是下载QT的源码,根据你要编译的版本选择QT的版本进行下载。我要编译5.10.1版本,所以我在http://download.qt.io/archive/...原创 2018-10-26 18:19:10 · 3196 阅读 · 0 评论 -
Qt最新版5.13在Windows环境静态编译安装和部署的完整过程(VS 2017/VS 2019)
文章目录为什么要静态编译1.源码下载为什么要静态编译在默认情况下,用QtCreator编译程序时,使用的是动态编译。编译好的程序在运行时需要另外加上相应的Qt库文件,一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地打包成一个可执行程序,那就需要使用静态编译。Qt官方不提供静态编译好的安装包,所以需要我们在自己的电脑上静态编译。而且exe文件会比动态编译的要小上很多。1.源码下载...原创 2019-06-14 10:11:04 · 13684 阅读 · 18 评论