技术交流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) {
        // 第二个工作
    }
}