
C/C++
Lamar Davis
Hello world, I'm stupid and I'm a SB.
展开
-
volatile c语言关键字 / cache / 内存一致性
volatile c语言关键字 / cache / 内存一致性原创 2022-10-27 15:27:40 · 679 阅读 · 1 评论 -
dlopen和constructor attribute
https://www.notion.so/dlopen-constructor-attribute-9fafb4ca4490459db76e389ba0da8856https://www.notion.so/dlopen-constructor-attribute-9fafb4ca4490459db76e389ba0da8856原创 2021-12-02 21:04:31 · 446 阅读 · 0 评论 -
C 语言 define 变参__VA_ARGS__使用
C 语言 define 变参__VA_ARGS__使用参考:https://www.cnblogs.com/langzou/p/6674528.html 在C语言的标准库中,printf、scanf、sscanf、sprintf、sscanf这些标准库的输入输出函数,参数都是可变的。在调试程序时,我们可能希望定义一个参数可变的输出函数来记录日志,那么用可变参数的宏是一个不错的选择。...转载 2018-04-03 13:22:04 · 589 阅读 · 0 评论 -
最长字符串匹配 lcss
最长字符串匹配 lcsslcss.cpp#include <iostream>#include <vector>#include <cstdlib>#include <algorithm> //max()函数#include <string>using namespace std;void lcss(const st...转载 2018-04-03 13:53:49 · 2028 阅读 · 0 评论 -
编译器的对齐方式
#include <stdio.h>//用来指定结构体(联合)中对齐的字节数,即按多少字节对齐,如果不指定,则结构体按照最大的数据成员的长度进行对齐,//如果指定了,为n,若n大于等于结构体中最大数据成员的长度,则n无效,按照最大数据长度对齐,若n小于最大数据成员长度//则按照n个字节进行对齐,及数据成员长度大于等于n的成员,地址必须是n的整数倍,长度小于n的无限制//注意,此...原创 2018-05-03 00:03:17 · 1190 阅读 · 0 评论 -
C语言中的assert
C语言中的asserthttps://blog.youkuaiyun.com/dacxu/article/details/27313799assert(expression);若expression表达式为false,当前进程会调用abort终止运行,并且会向stderr写一条消息。这条消息根据不同的实现有所不同,但是至少会包括,assert所在的源文件的文件名,行号,及对对应的expression。另外,若...转载 2018-05-06 00:57:40 · 509 阅读 · 3 评论 -
C语言中#的作用
C语言中#的作用https://blog.youkuaiyun.com/firetaker/article/details/7381345宏中"#"和"##"的用法 一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #i nclude<cstdio> #i nclude<climits> using namespace std; #define S...转载 2018-05-06 00:38:20 · 4423 阅读 · 0 评论 -
C语言中的位域
C语言中的位域定义 struct bit_fields{ /*位域名*/ /*----- 位域列表------- */ /*typename varname:bit_field_length, for example : */ int field1:2; char field2:3; uint64_t field3:8; ...原创 2018-06-11 17:13:06 · 1819 阅读 · 0 评论 -
字符编码的一点见解
UTF-8 类型为可变长类型,但是UTF-8和unicode转换无需查表,他们的有用信息部分是完全一致的,转换规则如下:UTF-80000 – 007F0xxxxxxx0080 – 07FF110xxxxx 10xxxxxx0800 – FFFF1110xxxx 10xxxxxx 10xxxxxx可见它是根据数值的大小来做长度区分的:1.小于7F(127)的数,7bit即可存储,一字节的最高bit...原创 2018-06-29 01:20:10 · 312 阅读 · 0 评论 -
C++ 中异常处理 层次结构 内存
异常的使用准则先以window的处理方式做以下介绍:调用throw()时不要抛出异常对象(这里假设为e)的指针,因为等到catch代码块执行时e所对应的内存已被销毁,正确使用方式时,throw一个e对象本身,而不是其指针,实际上,throw()前,会在当前函数 之外的 接下来的 栈空间 上调用e的copy构造函数,重新实例化另一个e,因为throw()函数调用后,catch代码块调用之前,会将ca...原创 2018-07-04 23:11:57 · 457 阅读 · 0 评论 -
C和C++中的无符号数和有符号数 位扩展
C和C++中的无符号数和有符号数 位扩展这里参照《深入理解计算机系统》先引入几个函数:#include <stdio.h>typedef unsigned char * byte_pointer;void show_bytes(byte_pointer start, size_t len){ size_t i; for(i = 0; i < len; i...原创 2018-04-08 22:07:02 · 2742 阅读 · 0 评论 -
C++11 正则表达式
C++11 正则表达式1、验证整个字符串是否符合给定正则表达式2、在字符串中查找符合给定正则表达式的子串3、在字符串中查找符合正则表达式的子串,并替换上述三点分别对应C++11中的三个函数,包含头文件#include <regex>验证整个字符串是否符合给定正则表达式使用函数std::regex_match(),一般都是分三步:1、定义正则表达式 std::regex 类,将正则表达式...原创 2018-03-13 23:50:25 · 371 阅读 · 0 评论 -
C++中重写重载重定义
C++中重写重载重定义函数重载: 必须在同一个类中进行,子类无法重载父类的函数,父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用函数重写(使用virtual): 必须发生在父类和子类之间 并且父类和子类中的函数必须有完全相同的原型 使用virtual关键字之后能够产生多态(不使用virtual,叫重定义)函数重定义(不使用virtual关键字) 必须发生在父类...原创 2018-03-06 00:27:31 · 309 阅读 · 0 评论 -
std::function和std::bind详解
std::functionstd::function包含于头文件 #include<functional>中,可将各种可调用实体进行封装统一,包括普通函数lambda表达式函数指针仿函数(functor 重载括号运算符实现)类成员函数静态成员函数下面实例通过上述几种方式实现一个简单的比较两个数的大小的功能:#include <iostream>#include <f...原创 2018-02-22 18:46:51 · 9435 阅读 · 3 评论 -
c++中的lambda表达式
完整格式[capture list] (params list) mutable exception->return type{ function body}各项具体含义如下: 1.capture list:捕获外部变量列表(不可省略) 2.params list:形参列表(没有可省略) 3.mutable指示符:使用值捕获到的外部变量默认为const类型,mutable可...原创 2018-02-23 11:24:07 · 464 阅读 · 0 评论 -
c语言和c++中的const
const修饰变量为只读变量,但C和C++中实现机制却不同,详见如下实例:main.cpp文件#include <stdio.h>#include <stdlib.h>extern "C" { extern int main1();}const int d = 10;int main(){ //c++中const修饰变量存放在符号表中,可能会为其分配类似...原创 2018-02-25 11:48:37 · 340 阅读 · 0 评论 -
C++中面向对象模型初探
C++中面向对象模型即类的封装原理初探这里主要概述成员函数的本质,这里只是用C语言的方式来实现C++中类的功能,并不代表C++编译器的真正做法,但C++编译器实现原理大致如此。/*注释部分为c代码的实现方式,也是C++编译器的实现原理*/#include <iostream>#include <cstdlib>using namespace std;class ...原创 2018-03-04 23:00:05 · 265 阅读 · 0 评论 -
C++成员函数指针
C++成员函数指针这里只是简单介绍成员函数指针的用法,部分内容参考如下链接,深层次介绍也请参见如下链接(应该是原文,可惜没有找到文章的原稿,链接中图片显示不正常):http://blog.youkuaiyun.com/xlie/article/details/3031966#_Toc133650388C++成员函数分为静态成员函数和普通成员函数,其中普通成员函数的实现中隐式包含了this指针作为其第一个参数,...原创 2018-03-04 23:40:13 · 810 阅读 · 0 评论 -
C++中的vptr指针
C++中的vptr指针若类中包含虚函数,则编译器会在类实例化对象时在对象中加入vptr指针,它指向一个虚函数表,子类和父类分别有自己的虚函数表,所以使用父类指针调用类的虚函数时,是根据实际的对象时子类对象还是父类对象,来实现虚函数的调用。引入vptr指针demo.cpp:#include <iostream>//多态成立的三个条件//要有继承 虚函数重写 父类指针指向子类对...原创 2018-03-05 00:08:33 · 3489 阅读 · 1 评论 -
C++中函数指针遇上函数重载
C++中函数指针遇上函数重载1、C++编译器会按照函数指针的类型自动选择重载函数test.cpp#include <iostream>using namespace std;void print(int a){ cout << "a is " << a << endl;}void print(){ cout <&...原创 2018-03-05 00:38:55 · 4019 阅读 · 3 评论 -
模板类中的友元函数
模板类中的友元函数模板类中友元函数不要滥用,最好只用来重载左移和右移运算符("<<"和">>"),如果用于普通友元函数重载, 会非常麻烦,即使类模板定义和声明分开,也建议都写在.h或.hpp文件中,即要保证模板类的定义和声明在一个文件中,否则,将不能找到函数的定义,这和模板的二次编译有关。参见官方的STL库风格可知,它也遵循这一原则,即类模板的定义和声明都写在一个文件中,由...原创 2018-02-26 00:07:12 · 2137 阅读 · 0 评论 -
C++中的友元函数
C++中的友元函数友元函数可以访问类中的私有变量,类似静态函数,友元函数不受public private protected等修饰符的限制,可以放在类中的任意位置。如果在类的声明中定义友元函数(即友元函数的声明和定义放在一处,都在类内部),则此友元函数为内联函数,即使没有使用inline关键字,且此友元函数的作用域为文件范围,而非类范围,调用此友元函数时也无需带“类名::”,虽然此友元函数的定义声...原创 2018-02-25 23:04:48 · 680 阅读 · 0 评论 -
C++中的类型转换
C++中的类型转换1、static_cast<> c语言中隐式类型转换的有效地方均可用static_cast<>()进行类型转换,这里隐式类型转换有两层含义:static_cast<type-name>(expression),expression可被隐式转换成type-name类型,type-name可被隐式转换成expression类型。所以,基类和派生类指...原创 2018-03-05 23:49:40 · 128 阅读 · 0 评论 -
C和C++中的rand和srand函数
C语言中的rand函数(stdlib.h)#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){ int i; srand(time(NULL)); for(i = 5; i > 0; i--) { printf("%...原创 2018-02-25 22:48:44 · 854 阅读 · 0 评论