C++
六炅
这个作者很懒,什么都没留下…
展开
-
C++中的Lambda表达式详解
#include<iostream>using namespace std;int main(){ int a = 1; int b = 2; auto func = [=, &b](int c)->int {return b += a + c;}; return 0;}当我第一次看到这段代码时,我直接凌乱了,直接看不懂啊。上面这段代码,如果你看懂了,下面的内容就转载 2016-08-20 13:51:25 · 586 阅读 · 0 评论 -
C++11——右值引用
C++中的引用允许你为以及存在的对象创建一个新的名字。对新引用所做的访问和修改操作,都会影响到它的原型(被引用的对象)。 例如:int var = 2;int& ref = var;ref = 9;// ref = 9;// var = 9;这种方式被称为左值引用——对左值的引用。左值这个概念来源与C语言,指的是可以放在赋值表达式左边的事物——在栈上或堆上分配的命名对象,或者其它有明确的内原创 2017-04-11 12:22:28 · 502 阅读 · 0 评论 -
虚析构函数
虚析构函数在C++中不能声明虚构造函数,但是可以声明虚析构函数。析构函数没有类型,也没有参数,和普通的函数成员相比,虚析构函数的情况略为简单些。 虚析构函数的声明语法为:virtual ~类名();如果一个类的析构函数是虚函数,那么由它派生的所有子类的析构函数也是虚函数。析构函数声明为虚函数后,在使用指针或引用时可以动态绑定,实现运行时的多台,保证使用基类类型的指针就能调用适当的析构函数针对不同的原创 2017-03-13 20:11:39 · 648 阅读 · 0 评论 -
虚函数
虚函数介绍原创 2017-03-13 19:46:51 · 319 阅读 · 0 评论 -
C++迭代器iterator
1、迭代器(iterator)是一种检查容器内元素并遍历元素的数据类型(1)每种容器类型都定义了自己的迭代器类型,如vector://这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型vector<int>::iterator iter;(2)使用迭代器读取vector的每一个元素vector<int> ivec(10, 1);for (vec转载 2017-03-12 15:11:02 · 617 阅读 · 0 评论 -
explicit关键字
构造函数定义的类型转换前言explicit关键字在C++中的作用是限制构造函数定义的类型转换,使其只能通过显示转换的方式完成。为了说明它的用法,先来看看下面的内容:我们知道当一个函数返回类型是一个类时,函数调用返回后,一个无名的临时对象会被创建,这种创建不是由用户显示指定的,而是隐含发生的。事实上,临时对象也可以显示创建,方法是通过使用类名调用这个类的构造函数。如下://Line和Point是两个类原创 2017-02-26 23:12:55 · 294 阅读 · 0 评论 -
类中的内联函数
前言在C++中内联函数分两种,一种式普通的内联函数,另一种就是类中的内联函数;内联函数的目的原本是为了减少函数调用的次数,但是会增加编译后代码的长度。因此在使用时要权衡好利弊。类中的内联函数在类中,内联函数的声明有两种方式:隐式声明显示声明隐式声明将函数体直接放在类体内,这种方式称之为隐式声明。如下:class Clock {public: void showTime() {原创 2017-02-26 16:49:14 · 1880 阅读 · 0 评论 -
C++重载练习
#include <iostream>using namespace std;class Point{public: explicit Point(int x = 0, int y = 0) : x(x), y(y) {} Point(Point &p) { this->x = p.getX(); this->y原创 2017-03-18 15:29:55 · 306 阅读 · 0 评论 -
运行时类型识别
前言我们知道,在类的继承中可以通过基类的指针(或引用)指向派生类的对象,利用多态性执行派生类中提供的功能。但这仅限与调用基类中声明的虚函数。如果希望对于一部分派生类的对象,调用派生类中引入的新函数,则无法通过基类指针进行。我们可以通过static_cast,将基类指针转换成派生类指针。但这样做并不安全,只能在指针所指向的对象类型明确的情况下执行。而有时只有在运行时才能知道指针所指对象的实际类型是声明原创 2017-03-17 16:46:35 · 738 阅读 · 1 评论 -
虚基类
虚基类的是为了避免在多继承的情况下,派生类从不同路径继承来的同名数据成员和函数在内存中有多个副本。来看看下面这个例子:#include <iostream>using namespace std;class Base0{public: int var0; void fun0(){cout << "Member of Base0" << endl;}};class Base1 :原创 2017-03-08 00:40:45 · 757 阅读 · 0 评论 -
C++中的类型转换(static_cast,dynamic_cast,const_cast,reinterpret_cast)
前言标题中的四中显示转换有时候总会忘掉,特意在此总结一下。C++中的类型转换分为两种:隐式类型转换;显示类型转换;g关于隐式转换这里不做总结,主要说明显示转换。在标准C++中有四个类型转换符:static_cast, dynamic_cast, const_cast 和 reinterpret_cast;static_caststatic_cast的转换格式: static_cast <typ原创 2017-02-26 11:36:51 · 398 阅读 · 0 评论 -
今天遇到的一个问题,在此先记录
对于C或C++,中的++,- -运算符,我想大家都会熟悉。它们理解起来并不困难,但是今天我随手写的一段代码却出现了一个我目前还想不通的问题,我先在此把它记录下来。 代码如下:int main(int argc, char *argv[]){ char str[] = "model"; char *q = str; cout << *q << " " << *++q <<原创 2017-03-01 15:59:45 · 289 阅读 · 0 评论 -
mutable关键字
前言mutable的字面意思是,易变的。它在C++中的作用是让一个常函数可以修改mutable修饰的变量。常成员函数的声明原则在类中声明成员函数时,如果这个函数不会改变对象的状态,那么我们就应该用const去修饰它,将其声明为常成员函数。那么怎样才算是改变对象状态呢?我以前只是简单的认为,只要修改了成员变量就是改变了对象状态,但是这种想法太片面了。还有一种特殊的情况,如果一个函数会改变某个成员对象的原创 2017-03-01 15:43:30 · 517 阅读 · 0 评论 -
C++11——移动语义
一般我们传递的右值都是临时变量,所以可以随意修改、如果我们知道函数的某个参数是一个右值,就可以将其作为一个临时存储或获取其中的内容,而不会影响程序的正确性。这也就意味着,比起拷贝右值参数的内容,再使用,不如直接使用该右值内容。当动态数组比较大的时候,这样可以节省很多内存分配,提供更多的优化空间。试想,一个函数以vector作为一个参数,就需要将其拷贝进来,而不对原始数据做任何操作。在C++03/98原创 2017-04-11 13:03:58 · 615 阅读 · 0 评论