技术交流QQ群:1027579432,欢迎你的加入!
1.Cpp修饰符类型
- C++允许在char、int 和double数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。下面列出了数据类型修饰符:
- signed
- unsigned
- long
- short
- 修饰符signed、unsigned、long 和 short 可应用于整型;signed和unsigned可应用于字符型,long可应用于双精度型;修饰符signed和unsigned也可以作为long或short修饰符的前缀。例如:unsigned long int
- C++允许使用速记符号来声明无符号短整数或无符号长整数。可以不写int,只写单词unsigned、short或 unsigned、long,int是隐含的。例如,下面的两个语句都声明了无符号整型变量:
unsigned int x;
unsigned y;
- 为了理解 C++ 解释有符号整数和无符号整数修饰符之间的差别,我们来运行一下下面这个短程序:
int main(){
short int i; // 有符号短整型
short unsigned int j; // 无符号短整型
j = 50000;
i = j;
cout << i << " " << j << endl;
return 0;
}
- 对于无符号化为有符号的位数运算,采取 N-2^n 的计算方法,n 取决于定义的数据类型 int、short、char、long int 等等,N 为无符号数的数值,例如文中的 N=50000,short 为 16 位,计算方法为 50000-2^16 得到 -15536。
2.Cpp中的类型限定符
-
类型限定符提供了变量的额外信息,见下表:
Cpp中的类型限定符.png
3.Cpp中的关键字explicit介绍
- 声明为explicit的构造函数不能在隐式转换中使用。C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色。一、是个构造器;二、是个默认且隐含的类型转换操作符。所以,有时候在我们写下如 AAA = XXX这样的代码时,且恰好XXX的类型正好是AAA单参数构造器的参数类型,这时候编译器就自动调用这个构造器,创建一个AAA的对象。
class Test1
{
public:
Test1(int n)
{
num=n;
}//普通构造函数
private:
int num;
};
class Test2
{
public:
explicit Test2(int n)
{
num=n;
}//explicit(显式)构造函数
private:
int num;
};
int main()
{
Test1 t1=12;//隐式调用其构造函数,成功
Test2 t2=12;//编译错误,不能隐式调用其构造函数
Test2 t2(12);//显式调用成功
return 0;
}
- volatile 往往会用于多线程的修饰,比如:
volatile boolean isNext = false;
Thread A() {
// 第一个工作
// isNext = true;
}
Thread B (){
if (isNext) {
// 第二个工作
}
}