![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
tianyingang
感谢关注
展开
-
理解typeid操作符
17-18 : int 和 int& 都输出i,即引用类型返回该引用所引用的对象的类型。28:是函数的类型名称,与29函数指针的名称不相同,即函数也没有退化为函数指针。此外,当涉及继承时还有一些细节需要考虑,未来会在另一篇文章中讨论。20-21,24-25: 顶层const被忽略。对比17和22可以看到,顶层const被忽略。为了方便理解,这里将返回的类型名称进行还原。26-27:可以说明数据未发生退化。原创 2024-02-22 17:30:30 · 146 阅读 · 0 评论 -
使用c++filt 还原RTTI返回的类型名称
typeid操作符会返回一个const type_info&对象,调用该对象的name()方法会返回一个const char*,但是具体的内容是跟编译器的实现相关的。可以看到g++输出的是一个mangled name,那怎么知道这个这个字符串具体代表什么意思呢?在g++ 编译后输出。原创 2024-02-22 16:27:20 · 188 阅读 · 0 评论 -
C++ 11 Reference qualifier or ref-qualifier
成员函数名后面的& 和&&代表什么意思?有什么应用场景?这篇文章可以帮你理解原创 2024-02-07 17:29:35 · 294 阅读 · 0 评论 -
c++ Templates:The Complete Guide第二版英文版勘误
看到这里的时候觉得不对劲,一查,果然是写错了,Values应该改成Vs。原创 2023-11-01 23:38:04 · 248 阅读 · 0 评论 -
enable_shared_from_this
一点基础std::shared_ptr是一个共享所有权的智能指针,它可以让我们安全地访问和管理对象的生命周期。多个std::shared的实例通过一个共享的控制块结构来控制对象的生命周期。控制块维护了一个引用计数,一个弱计数和其他必要的信息来管理内存中对象的存在。当用一个裸指针来构造或者初始化一个shared_ptr对象时,就创建了一个新的控制块。为确保一个对象仅由一个共享的控制块管理。其他的要指向这块内存的shared_ptr实例必须通过拷贝已存在的指向这块内存的shared_ptr实例来创建。例翻译 2021-04-04 15:05:51 · 831 阅读 · 0 评论 -
[咬文嚼字学C++]一个对象包含的shared_ptr不能指向自己
今天看到一篇文章,里面有这么一句话:ashared_ptris a strong reference and influences the lifetime of the managed object. An object that keeps ashared_ptrto itself becomes immortal, thus causing a memory leak:shared_ptr是一个强引用,会影响它所管理的对象的生命期。一个对象若是包含了指向自己的shared_ptr...原创 2021-04-04 01:34:13 · 226 阅读 · 0 评论 -
[咬文嚼字学C++]用来初始化智能指针的普通指针必须指向动态内存
如果违反了会有什么后果看一个例子:#include <iostream>#include <memory>int main(int argc, char **argv){ int x = 10; std::shared_ptr<int> spi{&x}; std::cout << *spi << std::endl; //10 std::cout << "usre_count:" &原创 2021-04-04 01:02:44 · 255 阅读 · 0 评论 -
字符串排序陷阱题
编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入: BabA 输出: aABb 规则 3 :非英文字母的其它字符保持原来的位置。 如,输入: By?e 输出: Be?y 注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)如果不考虑规则3, 那么就是一个简单的排序问题,对现有的稳定排序算法稍加改进原创 2021-04-03 17:38:34 · 367 阅读 · 1 评论 -
对数组做交换(swap)会发生什么?
在C++ Primer 9.2.5中讲道:与其他容器不同,swap两个array会真正交换他们的元素。因此,交换两个array所需的时间与array中元素的数目成正比。因此,对于array,在swap操作之后,指针、引用和迭代器所绑定的元素保持不变,但元素值已经与另一个array中对应元素值进行了交换。说明交换操作并不改变元素的内存地址,只是将两个数组相同索引所对应的内存中的值进行交换。写测试程序验证一下:#include <iostream>#include <..原创 2021-03-30 01:37:39 · 1837 阅读 · 0 评论 -
为什么C++中拷贝赋值运算符必须返回一个引用
通过一段代码说明这个问题#include <iostream>class A{public: A() : m_age(0){ std::cout << "construvtor invoked." << std::endl; } A(const int age):m_age(age){ std::cout << "int constructor invoked" << std::endl; }原创 2021-03-08 01:28:20 · 981 阅读 · 0 评论 -
Windows下通过进程名称获取进程pid
例如,通过devenv.exe找到进程id号为14376在msdn查到api接口为:DWORD GetProcessId( HANDLE Process);需要传入一个HANDLE,那问题又来了,怎样获得这个HANDLE呢?网上找了很久的答案,最后在stack overflow找到了答案https://stackoverflow.com/questions/865152/how-can-i-get-a-process-handle-by-its-name-in-c原...原创 2020-09-29 17:04:55 · 6709 阅读 · 0 评论 -
关于虚函数的默认实参的问题
A.hclass A{public: //... virtual void log(int a, int b = 2, int c = 3) const;};A.cppvoid A::log(int a, int b, int c) const{ std::cout << "A class \n"; std::cout << "{" << a << "," << b << "," <<.原创 2020-08-13 00:23:24 · 253 阅读 · 0 评论 -
C++中可能会出现内存泄漏的情况
1.new之后没有调用对应的delete;2.调用了delete但是delete没有执行,比如说delete在for循环内部,由于过早的continue,break,goto语句跳过了delete语句。或者由于出现异常导致delete语句没有执行。3.在有继承关系的类中,父类的析构函数没有声明为virtual,这样的话,当一个子类对象析构时父类的析构函数不会调用,从而造成子类对象中父类部分的内存没有释放。...原创 2020-08-12 22:36:39 · 174 阅读 · 0 评论 -
关于C++ 输出操作符重载
写了这样一个测试程序头文件:#ifndef C_TEST_BASICCONCEPTTEST_H#define C_TEST_BASICCONCEPTTEST_H#include <iostream>class cal {public: friend std::ostream &operator<<(std::ostream &os, const cal &print) ; friend cal operator+(cons原创 2020-05-09 18:30:41 · 175 阅读 · 0 评论 -
std::istream::ignore
istream& ignore (streamsize n = 1, int delim = EOF);Extract and discard charactersExtracts characters from the input sequence and discards them, until eitherncharacters have been extracted...转载 2020-05-06 11:22:37 · 342 阅读 · 0 评论 -
Varint编码
LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验。下面就对varint编码进行学习。传统的integer是以32位来表示的,存储需要4个字节,当如果整数大小在256以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省3个字节的存储空间,Google varint就是根据这种思想来序列化整数的原贴https://www.cnblogs...转载 2020-04-30 15:21:36 · 269 阅读 · 0 评论 -
google test 检查宏总结
布尔值检查Fatal assertion Nonfatal assertion Verifies ASSERT_TRUE(condition); EXPECT_TRUE(condition); conditionis true ASSERT_FALSE(condition); EXPECT_FALSE(condition); conditioni...转载 2020-04-30 10:54:41 · 567 阅读 · 0 评论 -
google test安装
#复制代码到本地git clone git@github.com:google/googletest.gitcd googletest/googletest/#在CMakeList.txt中作如下修改#添加一行SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")#将下面一行的OFF改成ON # BUILD_SHARED_LIBS is a stand...原创 2020-04-30 10:39:22 · 1015 阅读 · 0 评论 -
关于C++委托构造函数
#include <iostream>class randomClass{ int a_; long b_; double c_;public: randomClass(int a, long b, double c):a_(a),b_(b),c_(c){ std::cout << "3 agrv constructo...原创 2020-04-28 15:52:11 · 206 阅读 · 0 评论 -
C++中的类型转换测试程序
template< typename T>std::string quireTypeName(T value){ std::string type; if(typeid(value).name() == typeid(bool).name()) type = "bool"; else if(typeid(value).name() == typeid(un...原创 2020-04-28 11:48:20 · 118 阅读 · 0 评论 -
关于C++中的一些类型
void printTypeSize(void){ std::cout << "bool size :" << sizeof(bool) << std::endl; std::cout << "unsigned char size :" << sizeof(unsigned char) &l...原创 2020-04-28 10:10:09 · 172 阅读 · 0 评论 -
boost 学习笔记:一:Boost.Asio
Boost.AsioPortable networking and other low-level I/O, including sockets, timers, hostname resolution, socket iostreams, serial ports, file descriptors and Windows HANDLEs.ChristopherKohlhoffCo...原创 2019-12-03 15:59:17 · 157 阅读 · 0 评论 -
深拷贝与浅拷贝
#include <iostream>#include <cstdlib>using namespace std;class HasPtr{public: HasPtr() = default; HasPtr(int value,string * pointer); HasPtr(int); HasPtr(string *); ...原创 2019-09-17 18:47:14 · 74 阅读 · 0 评论 -
关于拷贝构造函数
#include <iostream>#include <cstdlib>using namespace std;class numbered{public: numbered(); numbered(string no) :mysn_(no){}; string mysn_;};numbered::numbered() { ...原创 2019-09-17 15:36:31 · 105 阅读 · 0 评论 -
关于insert_iterator和inserter
inline insert_iterator<_Container> inserter(_Container& __x, _Iterator __i) { return insert_iterator<_Container>(__x, typename _Container::iterator(__i)); }...原创 2019-09-11 17:51:37 · 263 阅读 · 0 评论 -
set容器的并、交、差
#include <iostream>#include <fstream>#include <vector>#include <array>#include <deque>#include <list>#include <algorithm>#include <set>#include...原创 2019-09-11 17:44:26 · 175 阅读 · 0 评论 -
while (getline(cin,str))循环无法跳出问题
#include <iostream>#include <vector>#include <string>using namespace std; int main() { string str; vector<string> svec; while (getline(cin,str)) { svec.push_back(st...原创 2019-09-18 17:12:38 · 3404 阅读 · 1 评论 -
将标准输出流与文件输出流之间的互相关联
intmain() { string file_name = "/home/zhihui/Videos/test"; ofstream local(file_name,std::ios::binary); local << "test file." << endl; //输出到文件 local << "tr...原创 2019-09-19 09:40:24 · 753 阅读 · 0 评论 -
关于类的静态成员的知识点
class ct{public: int x = 9; static int y ;// static int a = 67; //error: ISO C++ forbids in-class initialization of non-const static member ‘ct::a’ static constexpr int b = 13; ...原创 2019-09-19 11:56:56 · 285 阅读 · 0 评论 -
C++ primer 13.5 动态内存管理类示例程序
#include <iostream>#include <sstream>#include <fstream>#include <cstdlib>#include <set>#include <memory>#include <vector>using namespace std;class s...原创 2019-09-19 17:32:55 · 139 阅读 · 0 评论 -
stl_list
_Self& operator++() _GLIBCXX_NOEXCEPT { _M_node = _M_node->_M_next; return *this; } _Self operator++(int) _GLIBCXX_NOEXCEPT { _Self __tmp = *this; _M_n...原创 2019-09-19 23:42:48 · 117 阅读 · 0 评论 -
创建线程
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <string.h>using namespace std;pthread_t ntid;bool...原创 2019-10-08 14:38:36 · 128 阅读 · 0 评论 -
编译的时候出现/usr/bin/ld: cannot find -lusbcan
原因:找不到 usbcan 的库这个库不在系统默认查找路径,新建一个软链接到/usr/lib就好了sudo ln -s 库实际的路径原创 2019-10-09 11:03:23 · 559 阅读 · 0 评论 -
partition 函数使用练习
便准函数库定义了名为partition的算法,它接受一个谓词,对容器进行划分,使得谓词为true的值会排在容器的前半部分,而谓词为false的值会排在后半部分。算法返回一个迭代器,指向最后一个使谓词为true的元素之后的位置。编写函数,接受一个string,返回一个bool值,指出string是否有5个或更多字符。使用此函数划分words。打印出长度大于等于5的元素。#include&...原创 2019-09-06 00:21:47 · 873 阅读 · 0 评论