
C/C++
文章平均质量分 75
summer_sunrise
知行合一
展开
-
C++对象声明周期问题记录
多个对象的生命周期管理问题原创 2024-10-11 21:22:46 · 592 阅读 · 0 评论 -
函数优化中inline的用法
inline方法使用原创 2022-02-23 11:16:24 · 784 阅读 · 0 评论 -
C++的静态类型检查
C++静态类型检查原创 2022-02-20 22:28:56 · 903 阅读 · 0 评论 -
c++类成员函数的inline属性
问题类成员函数添加inline关键字的原因是什么,为什么存在?为什么存在?Bjarne在《The Design and Evolution of C++ 》中描述“带类的C”时有相关介绍:将inline函数引进带类的C,直接原因是一个具体的项目。在该项目中,由于某些类与实时处理有关,这种函数调用的开销是无法接受的;为了使类机制能够成为在这个应用中有用的东西,就要求在跨越保护屏障时不付出任何代价。只有在类声明中提供一种可用表示,并能把对公用(界面)函数的调用变成在线的(inline),才可能达到这个原创 2022-02-20 12:22:20 · 867 阅读 · 0 评论 -
CMake传递相关宏至源代码
Cmake传递预处理宏至源码原创 2022-02-19 10:32:31 · 5001 阅读 · 0 评论 -
constexpr关键字
constexpr关键字原创 2022-02-09 19:37:33 · 864 阅读 · 0 评论 -
从几个例子看函数重载
函数重载,名称修饰,name mangling原创 2022-02-06 21:08:10 · 982 阅读 · 0 评论 -
松弛型内存模型(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 · 692 阅读 · 0 评论 -
Pimpl中的unique_ptr编译错误及解决方法
C++ impl原创 2021-12-26 17:14:20 · 1479 阅读 · 0 评论 -
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 · 6806 阅读 · 0 评论 -
Benchmark tool library for c++ code
c++ benchmark tool library原创 2021-11-22 20:28:12 · 5002 阅读 · 0 评论 -
Thread Local Storage理解
Thread Local Storage理解带着问题去学习1. 什么是thread local storage?一种计算机编程方法,使用线程本地静态或全局的内存。2. 主要作用是什么?避免资源竞争;当多个线程访问同一个资源时,会产生竞争。当将资源声明为thread local storage时,则不会有竞争。使用全局对象方法的重入性;比如一个函数使用全局变量设置一个错误码(比如c库中的errno),如果errno是个全局变量,一个系统方法会重写这个值之前刚被另外一个线程修改,然而另一个线程的代原创 2021-10-31 01:08:35 · 1573 阅读 · 0 评论 -
C++代码review问题<三>:变量默认初始化
题记变量是我们编写程序的必不可少的元素(可谓程序大厦的一砖一瓦),当我们声明定义一个变量后,这个变量的初始值是什么,你可能会有疑惑(如果没疑惑,请确保你是已经完全清楚而不是不关心或者不在意,因为不符合预期的变量值,会将程序带到undefine behavior的境地);为了全面理解变量的初始化,我们按照下面几个方面进行分析:变量的种类(都有哪些变量),变量在进程内存中的存储位置、变量的初始值、变量的规范初始化变量的种类分为两大类:local variable、non-local variable;原创 2021-10-16 22:39:03 · 190 阅读 · 0 评论 -
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 · 210 阅读 · 0 评论 -
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 · 218 阅读 · 0 评论 -
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 · 1541 阅读 · 0 评论 -
从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 · 1933 阅读 · 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 · 2019 阅读 · 0 评论 -
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 · 322 阅读 · 0 评论 -
Smart Pointer好文转载
转载:智能指针原理及应用详细介绍转载 2020-06-22 16:56:26 · 148 阅读 · 0 评论 -
C++的访问控制:private、protected、public
C++访问控制修饰符原创 2019-12-14 14:45:33 · 1832 阅读 · 0 评论 -
子类初始化列表不能初始化父类元素 -- 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 · 6662 阅读 · 0 评论 -
C++安全编码概念及定义
C++安全编码目的建立编程人员的攻击者思维,养成安全编码的习惯,编写出安全可靠的代码。攻击者思维编程中应该时刻保持如下假设:程序处理的所有外部数据都是不可信的攻击数据。攻击者时刻试图监听、篡改、破坏程序运行环境、外部数据。安全编码基本思想基于以上假设,得出安全编码基本思想:程序在处理外部数据时必须经过严格的合法性校验:处理外部数据时,不能做出任何外部数据符合预期的假设,外部...原创 2019-03-02 10:56:27 · 2663 阅读 · 0 评论 -
C++安全编码:变量
变量指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值为了贯彻零开销原则(C++之父Bjarne在设计C++语言时所遵循的原则之一,“无须为未使用的东西付出代价”),编译器一般不会对一般变量进行初始化,也包含指针,所以负责初始化指针变量的只有程序员自己。使用未初始化的指针时,非常危险,因为指针指向内存空间,所以程序员容易通过未初始化的指针改写该指针随机指向的存储区域,而由此产生的后...原创 2019-03-05 18:43:37 · 3579 阅读 · 2 评论 -
c++编译时的一些问题思考(使用g++)
简介主要记录使用g++编译时,遇到的一些错误和总结,由于初步接触c++,会有一些比较低级的问题。如何与为何编写头文件如何转载 C++中头文件(.h)和源文件(.cpp)都应该写些什么这个帖子写的通俗易懂。总结如下头文件:写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等注意点:防止重复编译#ifndef XXXX_H#define XXXX_H//你的...原创 2019-02-21 11:32:43 · 1144 阅读 · 0 评论 -
C++安全编码:断言
断言简介在程序设计中,断言(assertion)是一种放在程序中的一阶逻辑(如一个结果为真或是假的逻辑判断式),目的是为了标示与验证程序开发者预期的结果-当程序运行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止运行,并给出错误消息。C++断言包含运行期检查断言、静态断言运行期检查的断言在程序运行时,可以用断言检查程序开发时的假设,确认这些假设是否成立。存在先天的缺点:...原创 2019-03-08 18:22:53 · 1777 阅读 · 0 评论 -
C++编译错误:call to deleted constructor of std::istream
call to deleted constructor of ‘std::istream’ (aka ‘basic_istream’)示例代码#include<iostream>using namespace std;int main(){ std::istream is = cin; //出错代码 return 0;}编译代码详细错误如下(g++ m...原创 2019-03-07 09:51:37 · 19295 阅读 · 2 评论 -
C++安全编码:函数
函数数组作为函数参数时,必须同时将其长度作为函数的参数由于C语言风格的数组,默认没有结束符,当读取数组时需要自己根据数组长度进行判断。(这个也是C/C++)比其他语言运行效率高的一点原因。严禁对公共接口API函数的参数进行ASSERT操作对于设计成API的函数,必须对参数进行合法性判断,严禁在API实现过程中产生CRASH。ASSERT,第一会产生crash,release版本又无效;所...原创 2019-03-11 21:20:15 · 1415 阅读 · 0 评论 -
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 · 478 阅读 · 0 评论 -
多线程中子线程抛出异常后,如何表现
进程与多线程多线程中一个线程抛出异常(不捕获);主线程及其他子线程如何表现结论:语言主线程子线程C++挂死挂死Java继续运行继续运行C++ code#include &amp;lt;iostream&amp;gt;#include &amp;lt;thread&amp;gt;#include &amp;lt;chrono&amp;gt;void thre原创 2018-11-21 15:16:42 · 9207 阅读 · 5 评论