C++笔记
dmcler
这个作者很懒,什么都没留下…
展开
-
指针与引用的三个概念
1. 对常量的引用const int ci = 1024;const int &r = ci;r = 42; // 错误,r 是对常量的引用int &r = ci; // 错误,试图让一个非常量引用指向一个常量对象注:1). 引用并非对象,它只是为一个已经存在的对象所起的另一个名字。 2). 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在原创 2015-04-02 23:04:49 · 564 阅读 · 0 评论 -
重载(overload)重写(override)
进来看到一篇关于重载、重写概念的博客,觉得很好,就转载过来。 本文系转载,慎重使用,尊重原创。 转载地址:http://www.cnblogs.com/luxiaoxun/archive/2012/08/09/2630751.html C++的重载(overload)与重写(override)成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同转载 2015-06-23 15:53:01 · 371 阅读 · 0 评论 -
【C++】inet_ptoa&inet_atop inet_pton&inet_ntop
inet_aton、inet_addr和inet_ntoa在点分十进制数串(例如”206.62.226.33”)与它的32位网络字节序二进制值间转换IPv4地址两个较新的函数:inet_pton和inet_ntop对IPv4和IPv6地址都能进行处理/* Convert Internet number in IN to ASCII representation. The return valu原创 2017-10-22 11:25:23 · 962 阅读 · 0 评论 -
【c++】sockaddr,sockaddr_in
struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体。网络中的地址包含3个方面的属性: 1 地址类型; 2 ip地址; 3 端口上图看结构:#include <sys/in.h>#include <sys/socket.h>#include <sockaddr.h>我们从这个宏定原创 2017-10-15 14:45:40 · 7496 阅读 · 2 评论 -
【c++】htons、ntohs、htonl、ntohl
在写Linux Socket编程时经常用到上述函数,常见的用法是:struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr.s_addr = inet_addr(ip.c_str());htons,host to network short int ntohs,netw原创 2017-10-26 20:22:08 · 1013 阅读 · 0 评论 -
【C++】new delete & new[] delete[]
Q1. new delete new[] delete[]分别做了什么? Q2. new[]申请的空间什么时候能用delete释放?这篇博客写得很好,评论也有亮点。 http://blog.csdn.net/hazir/article/details/21413833原创 2017-11-20 09:53:18 · 248 阅读 · 0 评论 -
【c/c++】function returns address of local variable
这个问题很普通,也很常见,例如下面的代码就会报这个错,原因在于: s是局部变量,在栈上分配空间,当函数结束后会回收空间,这样s返回的内容无效。 解决方法是在堆上申请空间,然后返回,但是这样做需要注意释放空间。char* func() { char s[100]; strcpy(s, "hello"); return s;}int main(int argc, char原创 2017-12-22 16:17:23 · 3080 阅读 · 0 评论 -
【c/c++】multiple definition-->static & extern
当遇到重复定义的时候经常会碰到这样的错误,对于这个错误的理解,找到两篇博客,第一篇博客解释了为什么会出现这个错误,第二篇解释了static和extern的作用。http://blog.csdn.net/xxxxxx91116/article/details/7446455 https://www.cnblogs.com/SarielTang/p/4501456.html原创 2017-12-24 17:14:07 · 570 阅读 · 0 评论 -
【c/c++】第一次使用-lwiredtiger时报错:can not open shared object file
编译链接报错:can not open shared object file: no such file or directory 1. sudo vim /etc/ld.so.conf 2. 因为libwiredtiger.so默认放到/usr/local/lib,所以打开后添加库路径 /usr/local/lib 3. 保存退出,执行 sudo ldconfig 4. 再次链接不报错原创 2017-12-27 17:03:37 · 934 阅读 · 0 评论 -
【c/c++】linux c++使用close报错
close是系统函数,包含头文件unistd.h即可, 这个头文件还有方法:read、write、fcntl……原创 2017-12-27 17:11:13 · 2898 阅读 · 0 评论 -
【c/c++】socket编程注意
个人经验 1. 粘包问题:使用固定头部,指明字节长度 2. 少用strcat、strcpy,尽量使用memcpy原创 2017-12-27 17:22:44 · 297 阅读 · 0 评论 -
【c/c++】wiredtiger-2.9.3编译错误
下载源码:http://source.wiredtiger.com/编译:Building and installing WiredTiger on POSIX执行脚本:sh autogen.sh此时报了一个错误,can’t exec libtoollize 解决方法:sudo apt-get install automake autoconf libtool 上述语句是按照auto原创 2017-12-27 16:50:30 · 362 阅读 · 0 评论 -
【C/C++】虚析构函数
直接从代码看结果// demo 1class Base {public: Base() { cout "Base Constructor" << endl; } ~Base() { cout "Base Destructor" << endl; }};class Derived : public Base {publ原创 2018-01-19 13:54:40 · 307 阅读 · 0 评论 -
【C++】static_cast,const_cast,dynamic_cast,reinterpert_cast
本文介绍C++中四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast。1. static_caststatic_cast应用于以下三种场景: (1)基本数据类型之间的转换int main(){ float pi = 3.1415; int a = static_cast<int>...原创 2018-03-07 14:53:32 · 1235 阅读 · 0 评论 -
【C++】全局变量、静态全局变量、静态局部变量
1. 全局变量全局变量存储在静态存储区,其作用域是全局作用域,生命周期是整个程序的生命周期。 具体而言,在一个文件中定义一个全局变量,在程序的其它文件中可以通过extern关键字再次声明说明该变量已经定义。2. 静态全局变量静态全局变量存储在静态存储区,其作用域只能是定义该变量的文件,生命周期是整个程序的生命周期。3. 静态局部变量静态局部变量存储在静态存储区,作用域...原创 2018-03-18 20:52:54 · 820 阅读 · 0 评论 -
C++访问控制——三种继承方式
文章系转载,慎重使用,尊重原创 转载地址:http://blog.csdn.net/shangyaowei/article/details/17424989不同继承方式的影响主要体现在:1、派生类成员对基类成员的访问控制。2、派生类对象对基类成员的访问控制。三种继承方式:1、公有继承(public)① 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成转载 2015-06-23 11:56:50 · 1125 阅读 · 0 评论 -
虚函数和纯虚函数
虚函数和纯虚函数转载 2015-06-23 09:45:33 · 737 阅读 · 0 评论 -
C++中的const成员变量
一次面试中遇到下面这个问题,觉得很有意思,记录下来------------------------------------------------------------------------------以下的定义是正确的吗class A{ private: const int var = 10;}-------------原创 2015-04-02 22:39:27 · 804 阅读 · 1 评论 -
extern的用法
在一个文件中访问另一个文件中的变量,需要用到extern首先在file1.cpp中定义变量varint var = 10;在file2.cpp中引用extern int var;这样便可在file2中访问file1中的var变量值得注意的是,我们也能给extern标记的变量赋一个初始值,但这么做也就抵消了extern的作用。ext原创 2015-04-02 22:50:34 · 524 阅读 · 0 评论 -
内联函数
一、什么叫inline函数? inline(小心,不是online),翻译成“内联”或“内嵌”。意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入转载 2015-04-19 13:16:58 · 480 阅读 · 0 评论 -
decltype类型
在C++11新标准中引入了新的类型说明符decltype,它的作用是选择并返回操作数的数据类型。如:decltype(fun()) var = x; // var的类型就是函数fun的返回类型1. decltype 处理 const 和引用const int ci = 0, cj = &ci;decltype(ci) x = 0; // x 的类型原创 2015-04-12 12:01:02 · 630 阅读 · 0 评论 -
mutable关键字
C++中,实现与const相反作用的关键字是mutable,被mutable修饰的变量处于永远可变状态,即使是在const函数中。 下面通过一个简单的例子说明Class A { public: void output() const; private: int info;}void A::output() { cout << info <<原创 2015-04-19 13:36:52 · 622 阅读 · 0 评论 -
文件相关内容
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plaincopyprint?#include ofstream //文件写转载 2015-04-19 13:48:25 · 411 阅读 · 0 评论 -
const成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,[cpp] view plaincopyconst char blank = ‘’; blank = ‘\n’; // 错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员。若要修转载 2015-04-26 10:45:36 · 476 阅读 · 0 评论 -
初始化 赋值 拷贝
折腾我挺长一段时间,基本挺明白了,先来个区别说明:赋值操作是在两个已经存在的对象间进行的,而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。 下面看例子。 c++中初始化和赋值操作差别是很大的。转载 2015-04-26 11:34:54 · 528 阅读 · 0 评论 -
派生类,基类类型转换
派生类,基类类型转换原创 2015-06-19 10:26:20 · 2275 阅读 · 0 评论 -
c++ 中 struct 和 class 的区别
struct 和 class 的区别转载 2015-06-18 11:15:24 · 386 阅读 · 0 评论 -
静态类型与动态类型
静态类型 & 动态类型转载 2015-06-18 10:05:50 · 6598 阅读 · 2 评论 -
派生类向基类转换的可访问性
感觉基类、派生类的关系是很微妙的,派生类向基类转换的可访问性,C++ Primer(中文5版,Ch15.5)给出了三句解释说明:只有当Derived公有继承Base时,用户代码才能使用派生类向基类的转换;如果Derived继承Base是protected或private,则用户代码不能使用该转换。不论Derived以什么方式继承Base,Derived的成员函数和友元都能使用派生类向基类的转换;原创 2015-06-23 14:15:34 · 1397 阅读 · 0 评论 -
【C++】__asm__volatile("":::"memory")
_ _asm _ _用于指示编译器在此插入汇编语句_ _ volatile _ _用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。memory强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers中已缓存的内存单元中的数据 将作废。cpu在需要的时候重新读取内存中的数据。“”:::表示这是个空指令。...原创 2018-03-13 11:00:53 · 455 阅读 · 0 评论