最近在复习C++,首先看的就是关键字,因为有一定基础,就直接略去熟悉的关键字了,直接看自己还不熟悉或者根本就没有用过的。
1、mutable关键字
mutable是用来突破const限制的,字面意思就是可变的,意味着即便是在一个const函数中,也是可以修改它的值的
i.e.
class A
{
public:
inline void out() const{cout<<"output for test!";}
};这个函数没有改变任何值,所以呢声明为const,但是如果现在我们有一个新的需求,希望能够计算出使用out函数的次数;首先想到的方法肯定是声明一个成员变量在out中自增。
但是函数式const的,问题就来了,该怎么办呢,其实很简单,只要将这个成员变量声明为mutable就行了
class A
{
private:
mutable int count;
public:
inline void out() const{cout<<"output for test!";count++;}
}; return-type class-name::operator#(parameter-list) {
...
}
return-type operator#(parameter-list) {
...
}其实是用在重载操作符的,上面的语法中,#号表示被重载的操作符,加入是在类中,那么应该指定类名。一员操作符参数列表应该为空,二元的话,在operator右边的应该当做函数的参数,左边的值被当做this通过。对于不属于重载函数的operator函数,在左边的被作为第一操作数,在右边的被作为第二操作数。asm {
instruction-sequence
}
or
asm( instruction );5、extern关键字
6、explicit
当构造函数被指定为explicit时候,将不会把构造函数自动作为转换构造函数。。所以他是只对构造函数有用,用来抑制隐式转换。
class A
{
private:
int count;
public:
A(int a){count=a;}
};
void fun(A){}
int main
{
fun(1);
}这时候就会发生隐式转化,有时候我们不需要这种转会,应当在构造函数前面加上explicit关键字
explicit A(int a){count=a;}7、auto
其特点是当执行流程进入该语句块的时候执行初始化操作,仅在语句块内部使用。C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。不过所有的非全局变量的缺省假定为auto。但是在VC2010中,它有了新的含义,他可以对类型进行推断,例如
auto a=100,那么a就是int类型的。
8、namespace关键字。命名空间
这个用的比较多,有必要作个记录,防止以后忘记
部分内容参考了百度百科
// one.h
char func(char);
class String { ... };
// somelib.h
class String { ... };
这两个头文件是不能包含在一个程序中的,因为string会发生冲突。所谓命名空间,就是将程序库名称封装起来的技术,就好像声明了什么什么东西是我们家的一样,别人要想用必须来借。
来自百度百科的实例,基本上阐述了namespace的用法和意义。
//DISPLAY Namespace Demonstration
#include <iostream>
using namespace std;
namespace savitch1
{
void greeting( );
}
namespace savitch2
{
void greeting( );
}
void big_greeting( );
int main( )
{
{
using namespace savitch2; //使用savictch2、std、全局三个命名空间
greeting( );
}
{
using namespace savitch1; //使用savitch1、std、全局三个命名空间
greeting( );
}
big_greeting( ); //使用了std一个标准命名空间
return 0;
}
namespace savitch1
{
void greeting( )
{
cout << "Hello from namespace savitch1.\n";
}
}
namespace savitch2
{
void greeting( )
{
cout << "Greetings from namespace savitch2.\n";
}
}
void big_greeting( )
{
cout << "A Big Global Hello!\n";
}
本文深入探讨了C++中的几个关键但不常用的关键字,包括mutable、operator、typename、asm、extern、explicit、auto及namespace等。这些关键字在特定场景下能够发挥重要作用,文章通过示例介绍了它们的具体应用。
955

被折叠的 条评论
为什么被折叠?



