自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sunrise的专栏

厚积薄发

  • 博客(90)
  • 资源 (6)
  • 收藏
  • 关注

翻译 Gazebo简介

gazebo

2022-03-13 22:16:46 2360

翻译 DDS是什么?

DDS: 全称为Data Distribution Service(数据分发服务)。

2022-03-07 17:55:36 11964

原创 函数优化中inline的用法

inline方法使用

2022-02-23 11:16:24 653

原创 C++的静态类型检查

C++静态类型检查

2022-02-20 22:28:56 786

原创 c++类成员函数的inline属性

问题类成员函数添加inline关键字的原因是什么,为什么存在?为什么存在?Bjarne在《The Design and Evolution of C++ 》中描述“带类的C”时有相关介绍:将inline函数引进带类的C,直接原因是一个具体的项目。在该项目中,由于某些类与实时处理有关,这种函数调用的开销是无法接受的;为了使类机制能够成为在这个应用中有用的东西,就要求在跨越保护屏障时不付出任何代价。只有在类声明中提供一种可用表示,并能把对公用(界面)函数的调用变成在线的(inline),才可能达到这个

2022-02-20 12:22:20 769

原创 CMake传递相关宏至源代码

Cmake传递预处理宏至源码

2022-02-19 10:32:31 4368

原创 constexpr关键字

constexpr关键字

2022-02-09 19:37:33 794

原创 从几个例子看函数重载

函数重载,名称修饰,name mangling

2022-02-06 21:08:10 892

原创 松弛型内存模型(Relaxed memory models)的一个有趣的例子

代码例子性能测试代码#include <benchmark/benchmark.h>int A, B;void func1() { A = B + 1; asm volatile("pause" ::: "memory"); B = 0;}void func2() { A = B + 1; B = 0;}void BM_MemoryBarrier(benchmark::State& state) { for (auto _

2022-01-17 20:06:59 594

原创 Pimpl中的unique_ptr编译错误及解决方法

C++ impl

2021-12-26 17:14:20 1260

原创 Google benchmark使用手册及范例

构建集成在robotic_arm的third_party已经集成了benchmark,只需在相关测试用例代码的CmakeLists.txt添加如下内容:target_link_libraries(xxx PRIVATE benchmark pthread)Demo样例存在以下模式样例:1. 使用BENCHMARK、BENCHMARK_MAIN宏#include <benchmark/benchmark.h>#include <chrono>#include <

2021-12-03 19:37:54 5854

原创 Benchmark tool library for c++ code

c++ benchmark tool library

2021-11-22 20:28:12 4826

原创 字节序: big-endian vs little-endian

如何快速记忆big-endian又名大尾序,就是数值的尾巴存储在大地址上。尾是相对我们认识的变量值,大是指地址;相对应,little-endian又名小尾序,数值的尾巴存储在小地址上。一句话大小是尾巴的地址,尾巴是数值的尾巴,指的是0xABCD(十进制43981)的D 如何判断字节序是大端还是小端通过二进制工具查看: readelf -h mainint main(){ return 0;}编译出二进制g++ main.cpp -o main使用readelf查看字节序

2021-10-31 17:57:56 298

原创 Thread Local Storage理解

Thread Local Storage理解带着问题去学习1. 什么是thread local storage?一种计算机编程方法,使用线程本地静态或全局的内存。2. 主要作用是什么?避免资源竞争;当多个线程访问同一个资源时,会产生竞争。当将资源声明为thread local storage时,则不会有竞争。使用全局对象方法的重入性;比如一个函数使用全局变量设置一个错误码(比如c库中的errno),如果errno是个全局变量,一个系统方法会重写这个值之前刚被另外一个线程修改,然而另一个线程的代

2021-10-31 01:08:35 1193

原创 C++代码review问题<三>:变量默认初始化

题记变量是我们编写程序的必不可少的元素(可谓程序大厦的一砖一瓦),当我们声明定义一个变量后,这个变量的初始值是什么,你可能会有疑惑(如果没疑惑,请确保你是已经完全清楚而不是不关心或者不在意,因为不符合预期的变量值,会将程序带到undefine behavior的境地);为了全面理解变量的初始化,我们按照下面几个方面进行分析:变量的种类(都有哪些变量),变量在进程内存中的存储位置、变量的初始值、变量的规范初始化变量的种类分为两大类:local variable、non-local variable;

2021-10-16 22:39:03 150

原创 C++代码review问题<二>:CMakeLists编写的一些规范

add_definitionsCMake文档描述Adds definitions to the compiler command line for targets in the current directory and below (whether added before or after this command is invoked)影响范围大( targets in the current directory and below ),会污染其他cmake文件。可以使用set_targ..

2021-10-14 20:51:32 161

原创 C++代码review问题<一>

包含头文件时,推荐使用c++风格详细讨论见知乎帖子:https://www.zhihu.com/question/51288493看下来一句话:都可以,c++风格代码风格会优雅些 #include <stdio.h> // bad #include <cstdio> // good非必要情况下,不使用无符号类型主要遵循c++ google style:You should not use the unsigned integer types such as.

2021-10-11 20:38:48 166

原创 Ros1中的pub和sub是如何建立连接的?

Ros1中的pub和sub是如何建立连接的?先上时序图,一睹为快连接拓扑关系简要描述连接拓扑关系:pub<–>rosmaster: pub节点进程与rosmaster使用xmlrpc机制进程通讯,xmlrpc是基于xml格式和http协议的一种rpc(remote procedure call)。sub<–>rosmaster: 同pub节点。pub<–>sub: 节点间使用socket(tcp/udp传输层协议)进行连接连接过程中的数据流图...

2021-09-10 19:44:23 914

原创 ros源码下载及编译

Ros1 源码下载及编译准备工作Setup your sources.listSetup your computer to accept software from packages.ros.org.sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'Set up your keyssudo a

2021-08-27 20:02:35 2432

原创 知识点学习

C++多态的原理是什么? 虚表什么时候确定,存放位置?虚函数的作用,为什么要用虚函数,virtual的其他用法?运行时多态和编译时多态区别,及优缺点?多态就是在基类函数上加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数,如果对象类型是派生类,则调用派生类的函数,如果对象类型是基类,则调用基类的函数。对于存在virtual关键字的对象,维护一个指向虚函数表的指针,虚函数表存放了该对象的所有虚函数地址;虚函数表是在编译阶段确定的,存放在程序的只读数据区; 指

2021-04-29 23:50:34 133

原创 uint8使用stringstream序列化和反序列化的坑

关于uint8使用stringstream序列化和反序列化注意点问题现象(通过一个例子查看)例子:int main(int argc, char** argv) { uint8_t in = stoi(string(argv[1])); printf("in: %c, %d\n", in, in); // 序列化 std::ostringstream ostream; ostream.str(""); ostream << in;

2020-12-17 21:38:21 1167

原创 进程间通信:condition_variable && unique_lock(c++)

condition_variable(条件变量)简介互斥锁用于上锁,条件变量用于等待;condition_variable类是一个同步原语,可以用来阻塞一个线程,或者同时阻塞多个线程,直到另外一个线程修改了条件(a shared variable: the condition)并且通知了condition_variable(notify).修改条件,并通知获取一把锁,通常使用std::lock_guard。在锁锁定的状态下,修改条件。调用notify_one 或者 notify_all,进行

2020-08-05 11:55:00 1980

原创 C++对象模型:构造函数语意--Default Constructor 什么时候生成,又做了什么

引言C++ Annotated Reference Manual中告诉我们:default constructors 在需要的时候被编译器产生出来;那么被谁需要?又做了什么事情呢?一个简单的例子#include <stdio.h>class Foo { // 不会合成出一个default constructorpublic: int val; Foo *pNext;};void FooBar(){ Foo bar; if (bar.val ||

2020-07-27 16:52:49 347

原创 从c++ istringstream读取字符(二)

get、getline、readgetsingle characterint get();istream& get (char& c);功能:从流中提取单个字符。返回该字符(第一个方法),或将其设置为参数的值(第二个方法)。c-stringistream& get (char* s, streamsize n);istream& get (char* s, streamsize n, char delim);从流中提取字符并将其作为c字符串存储在

2020-06-28 20:18:51 1685 1

原创 从c++ istringstream读取字符(一)

c++ istringstream读取字段之operator>>istringstream的继承关系如下:operator>>操作符继承istream,为extraction operator(导出符),它被重载为以下3类成员函数:arithmetic types(算术类型)istream& operator>> (bool& val);istream& operator>> (short& val);ist

2020-06-28 19:13:49 1797

原创 C++智能指针实现(shared_ptr, non-intrusive reference count)

题计根据上编智能指针好文中counted_ptr.h,实现智指针。智能指针实现的方式 (下面代码按照该方式实现)代码#include <iostream>class Data {public: Data(int data) : data(data){} ~Data() { std::cout << "~Data(): " << data << std::endl; } int data;};

2020-06-23 21:15:48 264

转载 Smart Pointer好文转载

转载:智能指针原理及应用详细介绍

2020-06-22 16:56:26 115

原创 C++的访问控制:private、protected、public

C++访问控制修饰符

2019-12-14 14:45:33 1679

原创 子类初始化列表不能初始化父类元素 -- class 'Derived' does not have any field named 'x'

缘由偶尔编写如下代码,编译出错,class Base{public: int x;};class Derived : public Base {public: Derived() : x(10) { cout << "Derived " << x << endl; }; int y;};int ...

2019-12-12 19:14:16 6326

原创 Linux磁盘占满问题分析步骤

本文主要介绍当Linux出现磁盘占满时,如何分析是哪些文件引起;1. 查看磁盘占用情况命令: df -h运行结果:root@host:~$ df -hFilesystem Size Used Avail Use% Mounted onudev 16G ...

2019-10-10 09:55:16 4874 1

原创 Linux内存--虚拟内存,buffer/cache

Linux内存相关上图是32位的操作系统的地址空间情况。申请虚拟内存首先获取寻址大小:查看cat /proc/cpuinfoyms@ubuntu:~$ cat /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 79model nam...

2019-09-16 18:45:53 930

原创 shell浮点运算

shell浮点运算bash内置了对整数四则运算的支持,但不支持浮点运算。有两种方法:借助bc(需系统安装)yms@ubuntu:~/sunrise/shell$ echo $((5-4))1yms@ubuntu:~/sunrise/shell$ echo $((5.9-4.1))-bash: 5.9-4.1: syntax error: invalid arithmetic oper...

2019-07-27 15:45:37 417

原创 shell 数组(含"map")操作总结

shell 数组操作总结字符含义举例#个数相关$#:shell的参数个数 KaTeX parse error: Expected '}', got '#' at position 2: {#̲array[@]}/{#array[*]}: 数组个数@、*所有元素$@ $: shell的所有参数列表 array[@]/{array[@]}/array[@]/ar...

2019-07-27 14:10:42 10367

原创 gtest初识

gtest初识总结本文以结合gtest github内容进行学习gtest。gtest github地址gtest编译g++ xx.cpp xx.h -lgtest -lpthread -o maingtest编写创建测试的一个简易的步骤:1.使用TEST()宏来定义和命名测试函数,这些是不返回值的普通C ++函数。2.在此函数中,与要包含的任何有效C ++语句一起使用各种g...

2019-05-13 20:15:30 313

原创 C++安全编码:函数

函数数组作为函数参数时,必须同时将其长度作为函数的参数由于C语言风格的数组,默认没有结束符,当读取数组时需要自己根据数组长度进行判断。(这个也是C/C++)比其他语言运行效率高的一点原因。严禁对公共接口API函数的参数进行ASSERT操作对于设计成API的函数,必须对参数进行合法性判断,严禁在API实现过程中产生CRASH。ASSERT,第一会产生crash,release版本又无效;所...

2019-03-11 21:20:15 1288

原创 C++安全编码:断言

断言简介在程序设计中,断言(assertion)是一种放在程序中的一阶逻辑(如一个结果为真或是假的逻辑判断式),目的是为了标示与验证程序开发者预期的结果-当程序运行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止运行,并给出错误消息。C++断言包含运行期检查断言、静态断言运行期检查的断言在程序运行时,可以用断言检查程序开发时的假设,确认这些假设是否成立。存在先天的缺点:...

2019-03-08 18:22:53 1639

原创 C++编译错误:call to deleted constructor of std::istream

call to deleted constructor of ‘std::istream’ (aka ‘basic_istream’)示例代码#include&lt;iostream&gt;using namespace std;int main(){ std::istream is = cin; //出错代码 return 0;}编译代码详细错误如下(g++ m...

2019-03-07 09:51:37 18083 2

原创 C++安全编码:变量

变量指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值为了贯彻零开销原则(C++之父Bjarne在设计C++语言时所遵循的原则之一,“无须为未使用的东西付出代价”),编译器一般不会对一般变量进行初始化,也包含指针,所以负责初始化指针变量的只有程序员自己。使用未初始化的指针时,非常危险,因为指针指向内存空间,所以程序员容易通过未初始化的指针改写该指针随机指向的存储区域,而由此产生的后...

2019-03-05 18:43:37 3398 2

原创 C++安全编码概念及定义

C++安全编码目的建立编程人员的攻击者思维,养成安全编码的习惯,编写出安全可靠的代码。攻击者思维编程中应该时刻保持如下假设:程序处理的所有外部数据都是不可信的攻击数据。攻击者时刻试图监听、篡改、破坏程序运行环境、外部数据。安全编码基本思想基于以上假设,得出安全编码基本思想:程序在处理外部数据时必须经过严格的合法性校验:处理外部数据时,不能做出任何外部数据符合预期的假设,外部...

2019-03-02 10:56:27 2534

原创 c++编译时的一些问题思考(使用g++)

简介主要记录使用g++编译时,遇到的一些错误和总结,由于初步接触c++,会有一些比较低级的问题。如何与为何编写头文件如何转载 C++中头文件(.h)和源文件(.cpp)都应该写些什么这个帖子写的通俗易懂。总结如下头文件:写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等注意点:防止重复编译#ifndef XXXX_H#define XXXX_H//你的...

2019-02-21 11:32:43 934

me525 root工具

一键root工具完美支持me525 me526。android 2.3.6

2013-03-21

android_Maptest

android平台下,Openstreet Map API工具第三方osmdroid插件开发的地图浏览器

2013-03-15

lingoes_2.8.1_zh

快捷支持离线翻译的软件,中文版,适合于阅读文档和学习的时候使用

2013-03-14

osmdroid-android-1.0.8

OpenStreet Map基于android的插件和接口

2013-03-14

slf4j-api-1.7.2.jar

slf4j-api-1.7.2.jar android开发的第三方插件

2013-03-14

slf4j-api-1.7.2-source.jar

slf4j-api-1.7.2-source.jar android中开发基于osmdroid所需的第三方插件包

2013-03-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除