
C/C++
hycxag
这个作者很懒,什么都没留下…
展开
-
复杂四则运算程序实现
# include<iostream>using namespace std;void removeSpace(char *str){ char *p1=str,*p2=str; while ((*p1=*p2++)) { if (*p1 != ' ') { p1++; } }}bool ...原创 2020-03-20 22:17:18 · 1554 阅读 · 0 评论 -
C/C++多态及其实现原理
C/C++多态及其实现原理多态的介绍多态含义为一个事物有多种形态。在C ++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。一般来说多态分为两种:静态多态:也称为编译时多态,主要包括参数多态,过载多态和强制多态。参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。如 C++语言中的函数模板和类模板属于参数多态。...原创 2018-10-09 14:40:59 · 3775 阅读 · 1 评论 -
C++中临时对象即返回值优化
C++中临时对象即返回值优化原创 2018-10-10 16:55:16 · 267 阅读 · 0 评论 -
构造函数、复制构造函数、赋值运算符的调用
构造函数、复制构造函数、赋值运算符的调用结合下面的例子来讨论三者的调用顺序#include <iostream>#include <vector>using namespace std;class Foo {public: Foo() { cout << "Foo constructor" << endl; } Foo(c...原创 2018-10-10 16:56:14 · 280 阅读 · 0 评论 -
给出一个表达式,求取表达式的值
给出一个表达式,求取表达式的值#include <iostream>#include <string>#include <vector>#include <sstream>#include <stack>using namespace std;/***思路:1.字符串预处理,针对可能出现的“{,},[,],-”等特殊...原创 2018-10-19 19:13:01 · 1181 阅读 · 0 评论 -
new/delete、malloc/free以及new[]/delete[]的区别和联系
new/delete、malloc/free以及new[]/delete[]的区别和联系 malloc函数 全称为memory allocation,原型为extern void *malloc(unsigned int num_bytes);用处:用来分配长度为num_bytes字节的内存块。如果分配成功则返回被分配内存的指针;若分配失败则返回空指针NULL。当内存不再私用时,...原创 2018-10-10 18:48:20 · 1007 阅读 · 0 评论 -
C++资源管理技术之RAII
C++资源管理技术RAII是“Resource Acquisition Is Initialization”的首字母缩写。也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。我们在C++中经常使用new申请了内存空间,但是却也经常忘记delete回收申请的空间,容易造成内存溢出,于是RAII技术就诞...原创 2018-10-10 18:48:50 · 243 阅读 · 0 评论 -
C++内存常见错误
C++内存常见错误在系统开发过程中出现的bug相对而言是比较好解决的,花费在这个上面的调试代价不是很大,但是在系统集成后的bug往往是难以定位的bug(最好方式是打桩,通过打桩可以初步锁定出错的位置,如:进入函数前打印日志,离开时再次打印日志)。而这些难以定位的bug基本分为2类:内存错误和并非问题。本文总结的时内存错误。 内存泄露 果在堆栈上分配的内存使用完成后没有释放就会造成内存...原创 2018-10-23 19:52:50 · 373 阅读 · 0 评论 -
C++智能指针
C++智能指针具体详细细节见https://www.cnblogs.com/lanxuezaipiao/p/4132096.htmlvoid remodel(std::string & str){ std::string * ps = new std::string(str); ... if (weird_thing()) throw e...原创 2018-10-23 22:59:01 · 195 阅读 · 0 评论 -
TCP/IP网络编程深入认识
TCP/IP网络编程深入认识 TCP网络编程中connect()、listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:connect函数:对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用...原创 2018-10-08 22:25:20 · 249 阅读 · 0 评论 -
C/C++编译过程
C/C++编译过程编译过程主要分4个过程:编译预处理;编译、优化阶段、汇编阶段、链接程序。 编译预处理 读取c/cpp源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处理。1. 宏定义指令如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Nam...原创 2018-10-08 16:56:56 · 895 阅读 · 0 评论 -
指针和运算符优先级
指针使用未初始化的指针会带来非常大的风险。0:null/nullptr,nullptr可隐式转为bool char *p={"abcd"}建立一个以\0终止的字符串字面值。p为第一个字符的地址。 注意:指向char类型的指针,输出方式以一种特殊的方式来解析这类指针——将p视为字符串本身,即p输出字符串本身,而不是字符串的地址,但*p仍是第一个字符 指针消除了使用数组、数组字符串造成的内存浪费的原创 2017-09-29 15:31:19 · 9112 阅读 · 0 评论 -
C/C++常量与变量的使用
C/C++常量与变量的使用常量:定义时设置初值,编译器将其放置一个只读的内存区域。用处:程序多出使用一个常数值时,可以用常量代替。C采用define来进行定义,eg:#define PI 3.1415;而C++采用const来定义,eg:const float PI = 3.14159;在函数体中,不需要修改的参数定义常量。变量:分配内存,一般需要进行初始化,变量定义分为如下两步: - 变量原创 2017-09-29 13:55:30 · 1806 阅读 · 0 评论 -
函数调用约定
函数调用约定了解后用于混合语言来开发项目 _cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈。 2、_cdecl是C和C转载 2017-09-29 22:04:52 · 186 阅读 · 0 评论 -
C++类中相关概念
C++类中相关概念假设A为一个类: A a():表示声明一个A类型的对象 A b:声明并定义一个A类型对象,定义使调用无参数构造函数。原创 2017-09-29 21:44:39 · 321 阅读 · 0 评论 -
C++中的转移字符
C++中转移字符顺序 描述 表示 \’ 单引号 字节0x27(ASCII编码) \” 双引号 字节0x22(ASCII编码) \? 问号 字节0x3f(ASCII编码) \ 反斜线 字节0x5c(ASCII编码) \a 可听见钟 字节0x07(ASCII编码) \b 退格 字节0x08(ASCII编码) \f 表单Feed - 新页面 字节0x0c(A转载 2017-09-29 22:31:37 · 606 阅读 · 0 评论 -
IP地址相关细节
IP地址相关细节在逻辑上标记一台唯一的电脑,用于更好的查找此电脑的位置。IPV4 ipv4的分类:4个字节(点分10进制表示) A类地址:0开头,接着7位网络号(共1个字节),后面24位主机号B类地址:10开头,接着14位网络号(共2个字节),后面16位主机号C类地址:110开头,接着21位主机号(共3个字节),后面8位主机号号D类地址:1110开头E类地址:11...原创 2018-10-12 13:46:15 · 978 阅读 · 0 评论 -
C/C++常见面试题目
C/C++常见面试题目与编译过程相关的问题 为什么在C++里面,一个类的成员函数不能既是 template 又是 virtual 的。 因为C++的编译与链接模型是"分离"的。一个C/C++程序就可以被分开编译,然后用一个linker链接起来。这种模型有一个问题,就是各个编译单元可能对另一个编译单元一无所知。 一个 function template最后到底会被 instantiat...原创 2018-10-08 14:22:33 · 328 阅读 · 0 评论 -
STL各种数据结构及其底层实现
STL各种数据结构及其底层实现vector:底层数据结构为数组 ,支持快速随机访问 。扩容规则为:当我们新建一个vector的时候,会首先分配给他一片连续的内存空间,如std::vector<int> vec,当通过push_back向其中增加元素时,如果初始分配空间已满,就会引起vector扩容,其扩容规则在gcc下以2倍方式完成:首先重新申请一个2倍大的内存空间;然后将原空间的...转载 2018-10-08 14:25:05 · 1462 阅读 · 0 评论 -
C++类型转换
类型转换隐式转换:隐式转换会产生意想不到的后果 unsigned int a(10); signed int b(10); cout<<a-b<<endl; a-b:首先把b转为unsigned int形式,再进行a-b的操作,其结果要表示为unsigned int类型。自定义对象子类对象可以隐式的转换为父类对象从低精度向高精度转换(精度高由两部分决定:类型高,数据表示范围大): cha原创 2017-09-29 14:39:15 · 193 阅读 · 0 评论