
c++
归零起步
这个人很懒,什么都没留下
展开
-
“undefined reference to xxx” 几个解决途径
链接器常见问题原创 2023-01-30 11:07:34 · 454 阅读 · 0 评论 -
饿汉模式(线程安全)注意事项
饿汉模式(线程安全)注意事项原创 2022-09-19 09:27:52 · 253 阅读 · 0 评论 -
magic static (c++11)
c++11 magic static原创 2022-09-19 09:17:06 · 847 阅读 · 0 评论 -
static局部变量、static全局变量、static在类中的使用、static是否用在头文件?
第一个问题: 为什么要引入static关键字一个新东西的引入,一定是为了解决某个实际问题。static有以下几个地方使用:1.用于函数内部的局部静态变量,此时,它改变了局部变量的生命周期;比如:void fun1() void fun2(){ ...原创 2020-03-18 15:32:28 · 695 阅读 · 0 评论 -
BSS段
BSS段用来存放:1. 所有的未被显式初始化的全局变量和静态变量;(包括局部静态变量)2.所有被显式初始化为0的全局变量和静态变量。(包括局部静态变量)...原创 2020-03-18 09:59:47 · 306 阅读 · 0 评论 -
面向对象
1.什么是面向对象?2.什么是面向过程?3.面向对象和面向过程有什么联系和区别?ps:以上问题经常在面试中被问到,下面,就个人理解以大白话简单做个介绍,不到之处望指正。举例子说明:今天午餐你想吃湖南菜,辣椒炒肉。面向过程做法:【亲力亲为】 买辣椒、肉,洗菜,切菜,下锅翻炒,出锅。面向对象 做法 【指挥别人】老婆,我想吃辣椒炒肉,然后,老婆去买辣椒、肉,洗...原创 2020-03-16 15:03:30 · 222 阅读 · 0 评论 -
c++中,程序运行调用的第一个函数一定是main函数吗?
答案是:no 举个例子说明:main.cpp有如下代码: #include <iostream>C c;int main(){ A *pa = new A; B b; static D d; deleta pa; return 1;}说明: A、B、C、D 为四个类,请问这4个类的构造调用的顺序是...原创 2019-02-12 14:56:02 · 5053 阅读 · 0 评论 -
字面值常量 简介
字面值常量 分几种,如下1. 整型字面值常量 有几种表示方法: 八进制(012)、十进制(10)、十六进制(0xA)2. 浮点型字面值常量 两种表示方法: 3.1415 2.1e-2 0. .001等3. bool型字面值常量 true 和 false4. 指针字面值常量 nullptr (c++11 ...原创 2018-08-29 16:23:58 · 2269 阅读 · 0 评论 -
getline(std::cin, temp) 跳过一行的问题
问题: 如果在getline 函数前 调用 cin 读取变量,则 getline会忽略一行?????贴上代码:片段一:#include <string>#include <iostream>int main(int argc, char *argv[]){ std::string str; std::cin >> str;...原创 2018-09-04 08:42:12 · 2146 阅读 · 0 评论 -
c++语言规定:不允许跨过变量的初始化语句直接跳转到该变量作用域内的另一个位置
片段一:int sc = 1;switch (sc){case 0: int val = 10; break;case 1: val = 5; // error,跳过了初始化 break;default:{}}分析: 此时 switch语句跳过case标签0中变量val的初始化语句,直接跳转...原创 2018-09-07 09:05:32 · 480 阅读 · 0 评论 -
c++ 构造函数初始化过程
每个类都会为它的对象定义初始化的方式,用一个或几个特殊的函数去控制对象的初始化,我们把这些特殊的函数叫做 构造函数。 那么,问题来了,构造函数作用是什么? 答:为了初始化对象的数据成员。就是简单。别把构造函数想着多复杂。 那么,问题又来了,构造函数和普通的成员函数有什么相似和区别呢? 答: 构造函数与函数名与类名同名,没有返回值类型,有一个参数列表(...原创 2018-09-14 11:26:52 · 4292 阅读 · 0 评论 -
简单类型转换
1. bool flag = 42; // flag返回 true,任何非零整数初始化bool变量,都为true2. int m1 = 10, m2 = 30; unsigned int u1 = 15, u2 = 40; std::cout << m1 - m2 << std::endl; // 整型变量相减还是整型变量, -20 ...原创 2018-08-29 15:56:46 · 221 阅读 · 0 评论 -
使用const 常量 代替 宏定义 需注意的问题
1. #define PI 3.1415 这是一个很常见的宏定义 不过,在c++中,effective c++中曾指出过,尽量用const 定义常量,来替换宏定义。 const double PI = 3.1415; 好处: const 替换 宏定义后,编译时能进行类型检查,一旦出错后,比宏定义更方便调试。2. 我们来思考一个问题,如果多个文件需要使用 ...原创 2018-08-29 15:45:46 · 4124 阅读 · 0 评论 -
普通引用 和 const 引用 区别
1. c++ primer中有一条规定: 引用所绑定的类型和所引用的对象类型需严格匹配。除了两个例外(下面再说),我们先看看普通的引用情况:① int i = 3; int &ri = i; //正确,引用绑定到int 变量i上② double d = 3.1415; int &rd = d; //错误, 引用类型为 int ,所绑定对象类...原创 2018-08-29 15:25:18 · 12673 阅读 · 2 评论 -
重定向
1. 程序中的重定向 #include <iostream> int main() { int a = 0; int b = 0; std::cin >> a >> b; std::cout << a + b << std::endl; retur...原创 2018-08-28 10:11:39 · 324 阅读 · 0 评论 -
从hello,world开始的思考
某天翻开 c++ primer,想到一个问题: 什么是程序?如果我问你,你能答出什么内容? c++ primer 的版本:程序即函数,一个或多个函数,必须含有main函数(启动程序,系统调用main); 恍然大悟,原来每本书都开始就讲hello,world... 你的答案是什么?欢迎在评论区讨论... ...原创 2018-08-27 11:26:01 · 172 阅读 · 0 评论 -
内存池、自由空间、堆内存 等名称解释(不间断更新。。。)
简单说说几个名词解释:(c++ primer 第五版)1. 内存池、自由空间、堆内存 其实是同一种概念的不同叫法。编译器分配的内存,一般在全局存储区,要么在栈内存等。堆内存,是程序员自己分配的内存,比如运算符 new用来在堆上分配内存,回收用delete 运算符。又或是,make_shared 分配存储,返回一个智能指针shared_ptr,当然,shared_ptr指向的对象内存...原创 2018-08-27 11:08:59 · 1424 阅读 · 0 评论 -
共享指针
简单介绍两种智能指针:1. shared_ptr 允许多个shared_ptr指向同一个对象, 即 “共享”一个对象2. unique_ptr 同一时刻,只允许一个unique_ptr指向一个对象,即 “独占”一个对象3. 共享指针 和 一般指针 共享指针 和 一般指针用法大致类同,主要区别在于: 共享指针负责自动释放它所指向的对象...原创 2018-08-27 09:58:00 · 1909 阅读 · 0 评论 -
(i++)、(++i)、(i +=1)、(i = i + 1)效率问题
(i++)、(++i)、(i +=1)、(i = i + 1)效率问题?从高到低按效率排序依次为:(++i) > (i++)>(i +=1)>(i = i + 1)。若知详情,请查看博文https://blog.youkuaiyun.com/qnavy123/article/details/79722304https://blog.youkuaiyun.com/qnavy123/article/deta...原创 2018-04-13 09:11:13 · 894 阅读 · 1 评论 -
数据抽象、封装、类
先来说说两个概念: 数据抽象 和 封装第一个问题: 这两个概念从何而来?答: 数据抽象和封装 是类的基本思想。为什么这么说?以下用大白话来解释下 举个例子,一部手机,有 开关机按钮、音量键、显示屏,我们可以通过他们来开关机、调节音量、查看手机信息等。但是手里里面是怎么实现这些功能的我们不知道(我们也不需要知道,这是手机开发者的事情),我们是手机的使用者,我们只关心这些键的用途,里...原创 2018-09-20 09:33:44 · 1530 阅读 · 0 评论 -
常量指针 和 指针常量
两种叫法: 常量指针 和 指针常量关于两种网上说法不一,书上说法也不一致,所以,我的建议是一般别用这两个词,但是在具体的语义下需要能看懂就行。我们换一个说法来说明这两个问题:顶层const 和 底层const请问,this指针一般情况下是 顶层const 还是 底层 const?我相信,这难不倒大家,this指针默认指向一个对象,指向的对象地址不可变,所以是顶层con...原创 2018-09-20 10:49:04 · 951 阅读 · 0 评论 -
数据抽象、封装、继承、动态绑定
问题一、什么是面向对象程序设计?它包括哪些?问题二、面向对象程序设计为什么会用到类?问题三、 标题四个词分别代表什么含义?首先,回答问题一面向对象程序设计(OOP)包括以下几个部分:1. OOA(面向对象分析)2. OOD(面向对象设计)3. OOP(面向对象编程)4. OOT(面向对象测试)5. OOSM(面向对象软件维护)以上英文缩写,如果想知道全称,可...原创 2018-10-17 19:07:52 · 369 阅读 · 0 评论 -
cin.get(s,n)注意点
第一个注意点:cin.get(s,n)如果从键盘敲入回车,将导致cin失效!!!!第二个注意点:chartest[10] = "123";cin.get(test, 10);std::cout << test << std::endl;从键盘输入12345678901回车后,get从缓冲区中读取前9个字符,输出123456789,注意:...原创 2019-08-07 15:02:01 · 566 阅读 · 0 评论 -
cin.getline() 用法的危险之处
char s1[m] = "1";std::cin.getline(s1, n);char s2[w] = "2";std::cin.getline(s2,k);假设键盘输入字符数为d若s1和s2是连续内存区域,(即s2地址在前,s1地址在后的连续内存区域)① 当w < d < k时,s2的输入可能导致s1的内存区域中的值被修改;②当 d ...原创 2019-08-06 20:27:52 · 814 阅读 · 0 评论 -
std::istream::getline
std::istream& getline(char* s, stringsize n);std::istream& getline(char* s, stringsize n, char delim);从输入缓冲区中提取字符,存入c风格字符串,直到以下情况发生1.提取的字符为终止字符delim;2.已经提取了n个字符(包括终止空字符)3.遇到文件结束符...原创 2019-08-06 19:51:40 · 2268 阅读 · 0 评论 -
cin使用注意几点(持续更新...)
cin使用注意几点:1.cin可以忽略 有效输入之前 的分隔符(空格、制表符\t、换行符\n) 举例说明: charch = ‘a’; std::cin >> ch ; std::cout << ch << '\n'; 当从键盘输入 [enter] [enter] [enter]z 即输入...原创 2019-08-05 14:17:39 · 1999 阅读 · 0 评论 -
0 、 '0' 、 "0" 、 ’\0’ 区别
在说明这个问题前,首先要搞明白什么是ASCII码值不明白的看以下链接中的ASCII字符代码表:https://baike.baidu.com/pic/ASCII/309296/0/e850352ac65c103880a07b53bc119313b17e8941?fr=lemma&ct=single#aid=0&pic=e850352ac65c103880a07b53bc...原创 2019-06-27 19:57:37 · 107800 阅读 · 4 评论 -
c++ 关键字 mutable
今天来讲讲c++中关键字mutable在c++primer中mutable第一次出现在类中,在讲解常成员函数的时候引入的。问题来了,mutable有什么用?我们知道,c++类中引入const关键字在成员函数尾部,使函数成为常成员函数。这么做的目的是,在常成员函数内部,不允许修改调用它的对象的内部状态(即不许修改对象的成员变量的值)。!!看不懂?没关系,继...原创 2019-05-29 14:41:23 · 14650 阅读 · 3 评论 -
关于 类的常成员函数 声明和定义处 都需要加 const的原因
我们知道,类的常成员函数尾部加了const关键字,而且,声明和定义处必须都加const关键字。举个例子说明://a.hclass A{public: A(){} ~A(){} void display() const;};//a.cpp#include "a.h"#include <ios...原创 2019-05-29 10:05:07 · 2897 阅读 · 0 评论 -
c++ 中枚举的简单用法
1. 为什么会有枚举???(大概了解下) 答:任何新名词的产生都是为了解决某一个实际问题的。当然枚举的产生也同样如此,它是为了更方便的解决某一个问题(马上下面会说到),没有枚举也能解决问题,但是有了枚举能更方便、更清晰的解决问题。 举个例子: 我们玩一款角色扮演类游戏,都要先创建角色,如果角色有3种(狂战士、龙骑士、魔法师),我们该怎么定义...原创 2019-04-12 11:11:40 · 4060 阅读 · 0 评论 -
C++中一些很有道理的废话(持续更新....)
1. 每一个c++程序都包含一个或多个函数。其中有一个函数名必须为main。 说明:读起来没毛病,想想为什么?? 每一个C++程序必须有,且只能有一个main函数,因为OS(操作系统)是通过调用main函数来运行c++程序的,所以,c++程序中必须有且有一个main函数。 问题来了,运行一个c++程序,第一个调用的函数是否一定是main函数呢? 见另一篇博文 c+...原创 2019-02-13 14:21:29 · 306 阅读 · 0 评论 -
采用 std::cin.get() 实现终端循环输入输出
直接上代码: #include <iostream>int main(){ char ch; while(std::cin.get(ch)) { std::cout << ch << std::endl; } return 0;} 以上代码,实现在终端输入一串字符,回...原创 2019-02-13 10:32:04 · 3981 阅读 · 0 评论 -
cout 声明与定义
头文件 iostream 中有如下声明:__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout;此处为声明 那么,cout 的定义在什么地方???答: 在 Microsoft Visual Studio 10.0\VC\crt\src 目录下 有个源文件 cout.cpp其中定义如下:__PURE_APPDOMAI...原创 2019-02-11 20:35:15 · 3359 阅读 · 0 评论 -
使用 cin 输入 string 对象
遇到这么一个问题:想从键盘输入一行字符串,然后输出到终端,不使用Qt方法一: std::string myWords; std::cin >> myWords; std::cout << myWords << std::endl;运行程序,在界面输入 I create a new virtu...原创 2019-02-11 09:57:41 · 21642 阅读 · 0 评论 -
进程 和 线程
看了很多篇进程 和 线程的文章,看到一篇比较新颖的,转载至此,供大家学习链接: 进程 和 线程 新理解转载 2018-04-18 14:09:38 · 141 阅读 · 0 评论 -
关于 using namespce std: 使用
先总结下:1. using namespce std;尽量不要(或者强硬一点,不许)在头文件中使用。 解析: 不让这么用,主要原因就是防止名字重复(即自定义变量名和std中名字重复),因为头文件会被很多地方使用,你不知道这个using能覆盖多大范围。2. 头文件最好不用,但在cpp文件中可以使用(但有比这更好的方法,之后说),但是,有个条件,必须用在所有#include之后。 解析:如...原创 2018-04-12 15:31:56 · 1389 阅读 · 0 评论 -
C++代码审查表(持续更新....)
一、 文件结构1. 头文件和定义文件的名称是否合理?2. 头文件和定义文件的目录结构是否合理?3. 版权和版本声明是否完善?4. 头文件是否使用了 ifndef/define/endif 预处理块?5. 头文件中是否只存放声明而不存放定义?二、 程序版式1. 空行是否得体?2. 代码行内空格是否得体?3. 长行拆分是否得体?4. “{”和“}”是否各占一行并且对齐于同一列?三、 命名规则1. 程序...原创 2018-03-19 08:23:37 · 457 阅读 · 0 评论 -
函数参数、返回值何时使用引用的问题(持续更新...)
1. 首先来说说函数参数使用引用的好处。 举例说明:例一:void modValue(int a){ a +=10; return;}int main(){ int n = 2; modValue(n); std::cout << n; // n仍为2,未变;}int modValue(int &a){ a +=10; ...原创 2018-03-22 18:29:20 · 373 阅读 · 0 评论 -
C++在类中使用枚举
举例说明:class A{ enum {SIZE1 = 100, SIZE2=200,} int array[SIZE1]; int array2[SIZE2];};分析: 类内枚举常量不占用对象的存储空间,在编译期间,被全部求值。枚举缺点:它的隐含数据类型是整数,其最大值有限,而且,不能表示浮点数(如 PI =3.14159)。...原创 2018-03-22 16:24:21 · 8611 阅读 · 0 评论 -
using namespace std; 尽量别用在头文件中
using namespace std; 尽量别用在头文件中,防止自定义的函数名和std中的函数重名。原创 2018-03-22 15:16:44 · 4596 阅读 · 0 评论