C++ Primer(第五版)
C++ Primer日常阅读积累
楼兰公子
这个作者很懒,什么都没留下…
展开
-
字符串映射函数定义实现-
static void func_pan (char *par) {}static void func_tilt (char *par) {}static void func_zoom (char *par) {}static void func_focus (char *par) {}typedef struct { string str; void (*func)(char *par);} stru_str2func;static const SCMD cmd[] ..原创 2020-11-03 15:48:22 · 239 阅读 · 0 评论 -
std::remove_if为什么无法删除队列中符合条件的元素
因为std::remove && std::remove_if只能堆由两个迭代器定义的一些列元素进行操作,而不知道下层集合,因此不能移除集合中的元素,算法只是吧符合删除条件的元素移动到集合的开头部分。其他条件元素处于不确定状态,算法返回一个指向第一个这样元素的迭代器,如果没有元素被删除,则指向集合的末尾,需要把这个迭代器传递给集合的成员函数erase,由它来执行删除操作...原创 2020-11-03 12:29:34 · 370 阅读 · 0 评论 -
linux 获取本地IP地址信息C++版本
#include <stdio.h>#include <string.h>#include <net/if.h>#include <sys/ioctl.h>#include <arpa/inet.h>#include <errno.h>#include<stdlib.h>#include<unistd.h>int getLocalInfo(void){ int fd; int .原创 2020-10-30 11:45:43 · 705 阅读 · 0 评论 -
字节序判断
int isLittleEndian(){ unsigned short i=1; return (1 == *((char *)&i));}原创 2020-07-23 15:28:39 · 126 阅读 · 0 评论 -
gcc 编译opencv应用程序的命令
gcc Test.c -o Test `pkg-config --cflags --libs opencv`./Test baboon.jpg原创 2017-11-02 20:16:01 · 2998 阅读 · 6 评论 -
【静态函数】访问类成员的四种方法
将类实例以形参形式传递 静态方法可以访问静态成员,可以把this赋值给静态变量(未能测试通过) 放在全局变量,glib很多 类似1方法,但是采用内存概念,形参void* pData)原创 2020-07-17 16:26:40 · 691 阅读 · 0 评论 -
[静态成员函数]
1.不能通过类名调用类的非静态成员函数gcc报错C23522.类的对象可以调用静态成员函数和非静态成员函数3.静态成员函数中不能引用非静态成员,但是在类的非静态成员函数可以调用静态成员4.类的成员变量在使用前必须先初始化5.静态成员函数访问非静态成员函数的方法 1)静态成员函数可以访问静态成员变量,全局变量和自身的函数形参 2)可以将对象作为static函数的形参传递进去 static void A::Instance(A *const pa){ pa-...原创 2020-07-17 16:23:58 · 199 阅读 · 0 评论 -
new操作执行的步骤
string *pSp = new string("a value"); //分配并初始化一个string对象string *pArr = new string[10]; //分配10个默认初始化的string对象//操作分三步//第一步: new表达式调用一个名为operator new(或者operator new[])的标准函数。此函数分配一块足够大,原始的,未命名的内存空间以便存储特定类型的对象或对象数组//第二部: 编译器运行相应的构造函数以构造这些对象,并为其传入初始值。//第三部,.原创 2020-06-03 11:08:42 · 259 阅读 · 0 评论 -
C_C++程序中时间日期打印
const char* time_tag = __TIME__ " "__DATE__ ;//则time_tag 值为该源文件最近一次编译的时间和日期,如18:10:14 Mar 16 2011//如果去掉中间的空格字符 __TIME__ __DATE__ 则为18:10:14Mar 16 2011// 简易显示示例#include<stdio.h>#include<stdlib.h>const char *months[] = {"Jan", "Feb".原创 2020-05-21 20:28:37 · 556 阅读 · 0 评论 -
C++常量字符串转换为字符数组的异常提示
warningISOC++forbidsconvertingastringconstantto'char*' [-Wwrite-strings]在C++11中有规定char* p = "abcd"; // valid in C, invalid in C++这样的赋值,编译器跳出警告。改成下面这样就会通过warningchar* p = (char*)"abc"; //OK或者这样:char const *p="abc";//OK如果在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行原创 2020-05-21 15:29:00 · 348 阅读 · 0 评论 -
可以直接执行的c文件
#if 0tmpName ="${0%.*}"gcc -o $tmpName "$0"./$tmpName "$0"rm $tmpNameexit#endif//test.c#include<stdio.h>int main(void){ printf(__function__); return 0;}原创 2020-05-20 12:45:13 · 184 阅读 · 0 评论 -
C++ Primer 目录
一 开始 1. 开始 1.1 简单C++ 1.2 初识IO 1.3 注释 1.4 控制流 1.5 类简介 1.6 书店程序二 基础 2. 变量和基本类型 2.1 基本内置类型 2.2 变量 2.3 复合类型 2.4 const限定符 2.5 处理类型 2.6 自定义数据结构...原创 2020-05-18 20:42:59 · 1141 阅读 · 0 评论 -
C++中文件打开操作错误
#define ATRIS_CONFIG_SET_BEGIN \ std::ifstream _in_(ATRIS_CONFIG_PATH, std::ios::binary); \ if (!_in_.is_open()) { \ log_error("%s Open file failed: %s", __FUNCTION__, ATRIS_CONFIG_PATH); \...原创 2020-04-14 19:41:38 · 389 阅读 · 1 评论 -
C++ 特殊用途语言特性
一,默认实参 有一种形参,在函数的很多次调用中他们都被赋予一个相同的值,此时把这个反复出现的值称为函数的默认实参 调用含有默认实参的函数时,可以包含该实参,也可省略。但是省略必须是省略后面的,所以让不怎么使用默认值的形参出现在前面,经常使用默认值的出现在后面typedef string::size_type sz; //关于typedefstring scree...原创 2020-03-31 23:19:21 · 91 阅读 · 0 评论 -
数组声明和赋值分开出现异常
Could not convert ‘{0, 0, 0}’ from ‘<brace-enclosed initializer list>’ to ‘std::array<unsigned int因为在头文件中声明了 int *a但是在构造函数中赋值出现如上错误很多人建议 添加-std =c++11,但是无效...原创 2020-03-25 14:12:25 · 1769 阅读 · 1 评论 -
C++ this指针
this形参是隐式定义的 任何自定义名为 this的参数或变量都是非法的原创 2020-03-04 16:47:29 · 88 阅读 · 0 评论 -
C++ 汇编以及调试源代码
#include <stdio.h>int addme(int a, int b){ int c ; c = a+ b; return c;}int main(int argc, char const *argv[]){ int ret= 0; ret = addme(10,20); printf("%d\n", ret);...原创 2020-02-16 00:41:28 · 196 阅读 · 0 评论 -
C++ 源码汇编报错
gcc -S builtin_gcc.cpp -o builtin_gcc.sbuiltin_gcc.cpp: In function ‘int passthrough(int, int, int)’:builtin_gcc.cpp:14:46: error: invalid conversion from ‘void (*)()’ to ‘void (*)(...)’ [-fpermissi...原创 2020-02-16 00:39:41 · 534 阅读 · 0 评论 -
C++ 源代码汇编源码时报错
gcc -S builtin_gcc.i -o builtin_gcc.sIn file included from builtin_gcc.cpp:1:0:/usr/include/stdio.h:29:8: error: expected identifier or ‘(’ before string constant__BEGIN_DECLS ^~~builtin_...原创 2020-02-16 00:19:21 · 835 阅读 · 1 评论 -
C++之叶子函数
1,不调用其他函数2,不开辟新空间原创 2020-02-15 14:57:06 · 1323 阅读 · 0 评论 -
C++之指向数组的unique_ptr为什么不用箭头或者号运算符
原因:unique_ptr指向的是数组不是单个对象,所以运算符无意义二,当一个unique_ptr指向一个数组是可以使用下标运算符访问数组元素原创 2020-02-15 11:47:39 · 552 阅读 · 0 评论 -
C++之空对象大小
空对象大小为一个字节,1,所有的对象不为02,对象大小原创 2020-02-15 11:33:53 · 326 阅读 · 0 评论 -
C++ 之迭代器失效
向容器中添加或者删除元素的操作可能使指向容器的指针、引用、迭代器失效。一个失效的指针、引用、迭代器将不再表示任何元素在向容器添加元素后,如果储存空间未重新分配,指向插入位置之前的元素的迭代器、指针、引用有效,但指向插入位置之后的将会失效。 在从容器删除元素之后,指向被删元素之前元素的迭代器、引用、指针仍有效。尾后迭代器也就失效。所以对容器进行操作之后,对迭代器需要更新。两种例子:遍...原创 2020-02-15 11:32:29 · 115 阅读 · 0 评论 -
C++ auto_ptr
1,不能在容器中保存auto_ptr2,不能在函数中返回auto_ptr原创 2020-02-10 22:43:41 · 78 阅读 · 0 评论 -
C++ unique_ptr不能拷贝的例外
可以拷贝或赋值一个将要被销毁的unique_ptr,最常见的例子是返回一个uniqe_ptrunique_ptr<int> clone (int p){ //正确的从int*创建一个unique_ptr<int> return unique_ptr<int>(new int(p));}//还可以返回一个局部对象的拷贝unique_p...原创 2020-02-10 22:29:56 · 470 阅读 · 0 评论 -
C++ 智能指针陷阱
总述:智能指针可以提供对动态分配内存安全而有全面的管理,但这建立在正确使用的前提坚持以下规则1,不使用相同的内置指针值初始化(reset)多个智能指针2,不delete get()返回的指针3,不使用get()初始化或reset另一个智能指针4,如果使用get()返回的指针,记住当最后一个对应的智能指针销毁后,指针就变无效了5,如果使用智能指针管理的资源不是new分配的内存...原创 2020-02-10 17:50:04 · 172 阅读 · 0 评论 -
C++ Primer目录
开始 变量和基本类型 字符串,向量和数组 表达式 语句 函数 类别 IO库 顺序容器 泛型算法 关联容器 动态内存 拷贝控制 重载运算和类型转换 面向对象程序设计 模板与泛型设计 标准库特殊设施 用于大型程序的工具 特殊工具与技术 标准库...原创 2020-02-10 11:37:54 · 320 阅读 · 0 评论 -
C++ 动态内存的管理非常容易出错,主要常见问题
1,忘记delete内存。造成内存泄露,这种内存永远不可能被归还给自由空间,2,使用已经释放掉的对象3,同一块内存释放两次原创 2020-02-09 19:03:07 · 164 阅读 · 0 评论 -
C++ delete 两个动作
1,销毁给定的指针指向的对象2,释放对应的内存delete p ; //1,p必须是指向一个动态分配的对象或是一个空指针原创 2020-02-09 17:16:25 · 109 阅读 · 0 评论 -
C++ 动态分配内存避免抛出bad_alloc问题
#include<new>using namespace std;//如果分配失败,new返回一个空指针int *p1 = new int; //如果分配失败,new抛出std::bad_allocint *p2 = new (nothrow)int; //如果分配失败,new 返回一个空指针...原创 2020-02-09 16:41:11 · 415 阅读 · 0 评论 -
new动态分配和初始化对象
1,自由空间分配的内存是无名的2,new无法为其分配的对象命名,而是返回一个指向该对象的指针3,默认情况,动态分配的对象是默认初始化的,所以内置类型或组合类型的对象值是未定义的,而类类型对象将用默认构造函数进行初始化string *ps = new string; //初始化为空stringint *pi = new int; //pi指向一个未初始化的int...原创 2020-02-09 11:51:14 · 429 阅读 · 0 评论 -
C++智能指针
1,shared_ptr 1)允许多个指针指向同一个对象2,unique_ptr 1)独占所指对象3,weak_ptr4,智能指针之间的区别 1)原创 2020-02-08 15:53:37 · 143 阅读 · 0 评论 -
C++内存分类
1,静态内存 1)保存局部static对象,类static数据成员,定义在函数之外的变量2,栈内存 1)栈内存保存定义在函数内的非static对象3,自由空间/堆 1)程序自有的内存池称为自由空间或堆, 2)程序用堆存储动态分配的对象,也就是程序运行时分配的对象 3)动态对象的生存期由程序控制,即不需要动态对象时,显式代码...原创 2020-02-08 15:31:32 · 421 阅读 · 0 评论 -
C++ ostringstream使用实例
for(const auto &entry:people){ ostringstream formatted,badNums; for(const auto &nums:entry.phones){ if(!is_valid(nums)){ badNums<<" "<<nu...原创 2020-02-08 14:18:14 · 222 阅读 · 0 评论 -
C++ 以out方式打开文件默认会丢弃已有数据
1,解决办法,在文件打开模式中添加app模式原创 2020-02-08 13:48:26 · 395 阅读 · 0 评论 -
C++ fstream打开文件
1,如果打开文件成功则fstream的成员函数good()函数为true,open会设置流的状态原创 2020-02-08 13:20:16 · 255 阅读 · 0 评论 -
C++中输入流关联到输出流的操作
1,cin.tie(&cout);2, cin.tie(&cerr);3,ostream *old_tie = cin.tie(nullptr); cin.tie(&cerr); cin.tie(&old_tie);4,每个流同时最多关联到一个流,但多个流可以同时关联到同一个ostream...原创 2020-02-08 12:26:33 · 593 阅读 · 0 评论 -
C++返回指向函数的指针
1,函数和数组都一样不能返回一个函数,但是能返回指向函数类型的指针2,编译器不会自动将函数返回类型当蹭对应的类型处理,所以必须把返回类型携程指针形式3,声明一个返回函数指针的函数,最简单的办法是使用类型别名using F= int(int*,int); //F是函数类型,不是指针using PF = int(*)(int*,int); //PF是指针类型...原创 2020-02-07 17:09:38 · 219 阅读 · 0 评论 -
C++函数指针
一,函数指针指向的是函数而不是对象,二,函数指针指向某种特定类型,三,函数的类型由它的返回类型和形参类型共同决定bool lengthCOmpare(const string& ,const string&);声明一个指向该函数的指针只需要用指针替换函数名即可bool (*pf)(const string&,const string&); //...原创 2020-02-07 17:06:10 · 139 阅读 · 0 评论 -
C++ 实参类型转换
一,精确匹配, 1)实参类型和形参类型相同;2)实参从数组类型或函数类型转换成对应的指针类型;3)向实参添加顶层const或者从实参中删除顶层const二,通过const转换实现的匹配三,通过类型提升实现的匹配四,通过算术类型转换实现的匹配五,通过类类型转换实现的匹配...原创 2020-02-07 15:25:52 · 262 阅读 · 0 评论