1 const2 mutable 1 const 类的数据如果是const属性,需要初始化,否则报错error C2789: “fush::d”: 必须初始化常量限定类型的对象 1struct fushu
2{
3constint d;//error C2789: “fush::d”: 必须初始化常量限定类型的对象4 }; 类的函数如是是const属性,则内部不能修改数据,否则报错error C3490: 由于正在通过常量对象访问“a”,因此无法对其进行修改 1struct fushu2{3int a;4 mutable int b;5void showabc() const 6 ...
1.虚函数如果不使用virtual关键字,当使用基类的指针p指向派生类的对象是,调用的p的一个方法(比如print)时,调用的是基类里面的print方法。如果使用virtual关键字,则可以调用派生类里的print方法。class Base
{
public:Base(){}
public:virtualvoid print(){cout<<"Base";}
};class Derived:public Base
{
public:Derived(){}
public:void print(){cout<<"Derived";}
};int main()
{Base *point=new Derived();point->print();...
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided. volatile 关键字是一种类型修饰符,用它声明...
C++98/03 关键字,ISO C++98/03关键字共63个:asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunioncaseenummutablestaticunsignedcatchexplicitnamespacestatic_castusingcharexportnewstructvirtualclassexternoperatorswitchvoidconstfalseprivatetemplatevolatileconst_castfloatprotectedthiswchar_tcontinueforpublicthrowwhiledefaultfriendregistertrue deletegoto...
转自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不...
//类模版中的static关键字
#include<iostream>
usingnamespace std;/*
类模板本质上是c++编译器根据类型参数创建了不同的类,
c++编译器在利用类模板生成类的时候会为每个类生成一个static变量
那么对于类中的static关键字就非常好理解了
static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化
这时候还没有通...
mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。 下...
c++ move关键字move的由来:在 c++11 以前存在一个有趣的现象:T& 指向 lvalue (左传引用), const T& 既可以指向 lvalue 也可以指向 rvalue。但却没有一种引用类型,可以限制为只指向 rvalue。c++11 中的 move() 是这样一个函数,它接受一个参数,然后返回一个该参数对应的右值引用.就这么简单!你甚至可以暂时想像它的原型是这样的(当然是错的)T&& move(T& val);&&的由来:在函数体中,程序员无法分辨传进来的参数到底是不是 rv...
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 {
public: char *_pstr; int _size; CxString(int size) { ...
我们都知道new是用来在程序运行过程中为变量临时分配内存的C++关键字,那它跟C语言中的malloc有什么区别呢,相比之下又为什么推荐使用new呢c++11throwing(1) void* operatornew (std::size_t size);nothrow(2) void* operatornew (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
placement(3) void* operatornew (std::size_t size, void* ptr) noexcept;<stdlib.h>
void *malloc(size_t size);1. 申请的内存所...
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_i...
C++关键字:mutable、volatile、explicit以及__based
mutable关键字
关键字mutable是C++中一个不常用的关键字,他只能用于类的非静态和非常量数据成员我们知道一个对象的状态由该对象的非静态数据成员决定,所以随着数据成员的改变,对像的状态也会随之发生变化!
如果一个类的成员函数被声明为const类型,表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员.但是有些时候需要在该类函数中对类的数据成员...
在Qt的开发中看到explicit,由此展开搜索。隐式:编译器完成的转换,如int a = 1;
float b = 3;
float sum;
sum = a + b; //a本是int,编译器将a隐式地转化为了float显式:用户完成的转换,如float a=1;
float b=3;
int s;
s = (int)a+(int)b;//a与b被显式地转化为了float对于函数而非数据,这里有另一个例子[引用]:#include <iostream>
usingnamespace std;class A{int x;public:A(){x=0;cout<<"Create A:0"<<endl;}A(int a){x=a...
1 修饰有参数的构造函数,只能显示调用,不能隐式调用。
2 无参数的构造函数,加与不加都一样#include <iostream>class A
{int data;
public:A() {data=0;}explicit A(int a) {data=a;}explicit A(int a,int b) {data=a+b;}~A() {}void show() {std::cout<<"class A:"<<data<<std::endl;}
};void TestClassA() {A a;//okA a11(1);//okA a12{1};//ok//A a13=1;//error//A a14={1};//errorA a21(1,2);//okA a22{1,2};//ok//A a23={1...
原文转自: http://www.cnblogs.com/ymy124/p/3632634.html首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { pub...