- 博客(114)
- 资源 (5)
- 收藏
- 关注
原创 c++中的继承与静态成员
如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论从基类中派生出多少个派生类,对于每个静态成员来说都只存在唯一的实例。
2024-10-11 00:33:54 236
原创 理解typeid操作符
17-18 : int 和 int& 都输出i,即引用类型返回该引用所引用的对象的类型。28:是函数的类型名称,与29函数指针的名称不相同,即函数也没有退化为函数指针。此外,当涉及继承时还有一些细节需要考虑,未来会在另一篇文章中讨论。20-21,24-25: 顶层const被忽略。对比17和22可以看到,顶层const被忽略。为了方便理解,这里将返回的类型名称进行还原。26-27:可以说明数据未发生退化。
2024-02-22 17:30:30 166
原创 使用c++filt 还原RTTI返回的类型名称
typeid操作符会返回一个const type_info&对象,调用该对象的name()方法会返回一个const char*,但是具体的内容是跟编译器的实现相关的。可以看到g++输出的是一个mangled name,那怎么知道这个这个字符串具体代表什么意思呢?在g++ 编译后输出。
2024-02-22 16:27:20 221
原创 C++ 11 Reference qualifier or ref-qualifier
成员函数名后面的& 和&&代表什么意思?有什么应用场景?这篇文章可以帮你理解
2024-02-07 17:29:35 326
原创 Linux read命令详解
2.read从标准输入读取一行数据,并将其split,再将split后的字段赋值给read命令最后指定的变量,下面的例子中,从标准输入读取一行,split后将第一个字段的值赋值给yourname变量,即Gilbert,将第二个字段的值赋值给yourage变量,即30,split默认的分隔符是IFS变量的值,这个值默认是空格。6.默认遇到换行符read命令返回,可以限制读入的总字符数,当输入的总字符数达到后read立即返回,7. 指定结束符,默认遇到换行符结束读取,read返回,通过-d可以指定新的结束符。
2024-01-10 13:37:35 805
原创 c++ Templates:The Complete Guide第二版英文版勘误
看到这里的时候觉得不对劲,一查,果然是写错了,Values应该改成Vs。
2023-11-01 23:38:04 283
原创 移动一个const对象会发生什么?
我们知道,通过移动操作从一个对象中“窃取”数据的时候,被窃取的那个对象会被修改。这也是为什么移动构造函数要声明成Test(Test&&)的原因。当我们对一个const对象进行移动时,直觉上可能会认为,无法编译通过。毕竟移动操作会修改源对象,但是原对象又是一个const对象,很矛盾。但是实际上上面的代码可以编译通过。但是最好不要对const对象应用移动操作,如果这个对象尺寸很大的话,拷贝操作的代价很高。可见,如果试图对一个const对象进行移动操作,最终会使用拷贝来作为一个变通方法。
2023-10-16 22:30:34 406
原创 修改cmake默认使用的编译器
通过上面的输出可以看到,在/usr/bin目录下,有三个文件:gcc,g++,c++,其中gcc和g++都是软连接,指向gcc9.1和g++9.1,而c++是一个普通的可执行文件。机器上的当前编译器是gcc4.8,无法完全支持c++11的正则表达式,于是安装了gcc9.1.同时也修改了/usr/bin/gcc和/usr/bin/g++软连接的指向。使用的编译器还是gcc4.8.5,而且编译器的文件名不是/usr/bin/g++,而是/usr/bin/c++.从下面输出可以看到,版本已经更改。
2023-09-27 09:40:00 906
原创 char*加上一个整数会发生什么?
a指向一个字符串"hello", "hello"代表这个字符串的起始地址,那么,"hello" + 1就代表这个字符串的第二个字符所在的地址。因此b相当于在a的基础上向后移了一位,因此b指向的字符串为"ello",此时a和b会指向同一个字符串的不同位置吗?不过通过这个例子可以说明给字符串加上整数会发生什么。
2023-09-27 09:16:45 312
原创 为什么crontab无法拉起进程
你有没有经历过这种情况,你写了一个进程自动拉起脚本,然后将这个脚本配到crontab,当你手动执行这个脚本的时候,是可以拉起这个进程的,但是crontab就是无法拉起。要验证这个猜想很简单,在你的自动拉起脚本中加一句env > /path/to/your/file,这样,当crontab运行这个脚本时就会将环境变量导入到这个文件中,你再将它和你当前会话shell中的环境变量比较一下,就能发现差异了。怎么解决这个问题呢?
2023-03-08 15:08:57 310 1
原创 Java concurrency - Task Execution
所谓的“任务递交和任务执行解耦”就是说你可以轻易地通过实现自己的Executor接口改变某个任务的执行策略。Executor接口支持多种执行策略,将任务的递交和任务的执行解耦。:当当前的线程池大小超出处理任务所需数量时,销毁一些空闲线程,另一方面,当需求增加时,再创建新的线程,对线程数量没有限制。多个线程可以提升吞吐量,但线程数不能无限制地增长,因此要限制线程的数量。:单线程执行器,创建单个线程来处理任务,任务保证是序列化处理的。:固定大小的线程池,支持滞后的或者周期性的任务,类似于定时器。
2023-02-25 01:07:09 385
原创 Java concurrency - dead locks
如果一个任务在线程池中执行,同时它又依赖另一个任务,就可能会死锁。在一个单线程的执行器中,如果一个任务A把另一个任务B提交给同一个执行器并等待其结果,那么一定会造成死锁。第二个任务B干坐在任务队列中等待第一个任务A结束,但是第一个任务A永远不会结束,因为它在等待第二个任务B的计算结果。dead lock的常见形式。
2023-02-23 00:09:04 87
原创 Java concurrency-thread confinment
thread-local数据是线程安全的,因为只有一个线程可以访问这些数据,这就消除了竞争的风险。由于竞争不存在,因此不需要对数据进行加锁,因此thread confinement这个实践可以使得你的代码更加安全(从源头上大大降低了编码错误的隐患)且扩展性更好(无锁)。thread confiment 是一种实践,确保只有一个线程可以访问数据,这样的数据叫做thread-local数据,因为它是与某一特定的线程相关的。
2023-02-22 23:32:04 69
原创 排序
void shellSort(int array[], int n) { // Rearrange elements at each n/2, n/4, n/8, ... intervals for (int interval = n / 2; interval > 0; interval /= 2) { for (int i = interval; i < n; i += 1) { int temp = array[i]; int j; f.
2021-05-27 15:19:24 88
翻译 enable_shared_from_this
一点基础std::shared_ptr是一个共享所有权的智能指针,它可以让我们安全地访问和管理对象的生命周期。多个std::shared的实例通过一个共享的控制块结构来控制对象的生命周期。控制块维护了一个引用计数,一个弱计数和其他必要的信息来管理内存中对象的存在。当用一个裸指针来构造或者初始化一个shared_ptr对象时,就创建了一个新的控制块。为确保一个对象仅由一个共享的控制块管理。其他的要指向这块内存的shared_ptr实例必须通过拷贝已存在的指向这块内存的shared_ptr实例来创建。例
2021-04-04 15:05:51 860
原创 [咬文嚼字学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 255
原创 [咬文嚼字学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 283
原创 字符串排序陷阱题
编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。 如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。 如,输入: BabA 输出: aABb 规则 3 :非英文字母的其它字符保持原来的位置。 如,输入: By?e 输出: Be?y 注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)如果不考虑规则3, 那么就是一个简单的排序问题,对现有的稳定排序算法稍加改进
2021-04-03 17:38:34 408 1
原创 对数组做交换(swap)会发生什么?
在C++ Primer 9.2.5中讲道:与其他容器不同,swap两个array会真正交换他们的元素。因此,交换两个array所需的时间与array中元素的数目成正比。因此,对于array,在swap操作之后,指针、引用和迭代器所绑定的元素保持不变,但元素值已经与另一个array中对应元素值进行了交换。说明交换操作并不改变元素的内存地址,只是将两个数组相同索引所对应的内存中的值进行交换。写测试程序验证一下:#include <iostream>#include <..
2021-03-30 01:37:39 1988
原创 为什么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 1063
原创 mysql使用游标cursor时循环额外多出一次的解决办法
mysql cursor 中使用循环(loop, 或者 repeat)时,循环每次会多执行一次。比如说,一次查询返回5条记录,使用cursor遍历时,循环会执行6次,当返回10条记录时,循环会遍历11次。出现这个现象的原因是,循环中的代码逻辑有点问题,稍加修改就能正常工作了。先贴出有问题的代码:DELIMITER //CREATE PROCEDURE traverse_tables()BEGIN DECLARE tabnames_smsi varchar(50); DECLARE...
2021-01-08 16:22:51 1114
原创 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 7095
原创 关于虚函数的默认实参的问题
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 277
原创 C++中可能会出现内存泄漏的情况
1.new之后没有调用对应的delete;2.调用了delete但是delete没有执行,比如说delete在for循环内部,由于过早的continue,break,goto语句跳过了delete语句。或者由于出现异常导致delete语句没有执行。3.在有继承关系的类中,父类的析构函数没有声明为virtual,这样的话,当一个子类对象析构时父类的析构函数不会调用,从而造成子类对象中父类部分的内存没有释放。...
2020-08-12 22:36:39 199
原创 ros2踩坑记
在构建一个激光雷达点云的包时,遇到一个很奇怪的问题,包能构建成功,但是使用ros2 run 时,无法用Tab键补全可执行文件名(包名是可以补全的),手动输入 ros2 run <package_name> <executable_name> 会提示:No executable found这个问题困扰了我好久,最终在这里 找到了原因。...
2020-07-01 11:17:42 3522 5
原创 ros2 接口
/** \mainpage rclcpp: ROS Client Library for C++ * * `rclcpp` provides the canonical C++ API for interacting with ROS. * It consists of these main components: * * - Node * - rclcpp::Node * - rclcpp/node.hpp * - Publisher * - rclcpp::Node::c.
2020-06-15 14:33:28 1008
原创 关于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 199
原创 bazel安装
官网https://github.com/bazelbuild/bazel/releases利用二进制文件安装详细步骤第一步:安装预先需要的支持包sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python第二步:下载Bazel从官网中下载命名格式为的Bazel二进制安装包第三步:安装Bazel比如我...
2020-05-06 15:35:08 1466
转载 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 367
转载 Varint编码
LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验。下面就对varint编码进行学习。传统的integer是以32位来表示的,存储需要4个字节,当如果整数大小在256以内,那么只需要用一个字节就可以存储这个整数,这样就可以节省3个字节的存储空间,Google varint就是根据这种思想来序列化整数的原贴https://www.cnblogs...
2020-04-30 15:21:36 291
转载 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 589
原创 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 1050
原创 关于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 227
rate() versus irate() in Prometheus (and Grafana).pdf
2020-10-13
errno(3) - Linux manual page.pdf
2019-11-11
ROS::TF_TePRA2013_Foote.pdf
2019-10-18
UNIX Time-Sharing System
2019-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人