0
点赞
收藏
分享

微信扫一扫

C++ 面试知识回顾

墨香子儿 2023-05-21 阅读 53

C++数据类型之重要关键字详解

引言

一、const修饰普通变量

C++中,const关键字修饰普通变量表示该变量的值是不可修改的,即它是一个常量。常量必须在定义时进行初始化,之后就不能再改变其值。

例如:

const int a = 10;
a = 20; // 编译错误,a是一个常量,值不可修改。

在函数参数中,使用const可以防止函数改变传入的参数的值。

例如:

void printValue(const int value) {
  // value += 1; // 编译错误,value是一个常量,值不可修改。
  cout << "The value is: " << value << endl;
}

注意,在C++中,使用const修饰一个变量并不意味着它一定会被存储在只读内存中。编译器仍然有可能将其放在可写内存中,只是在代码中访问该变量时会禁止修改它的值。因此,如果需要确保变量的值不被修改,应该使用更加严格的措施,如C++11中的constexpr或C++17中的std::string_view等。

重点说明

(1)如果是以常量初始化const修饰的变量,那么只读变量的值事先存放在 “符号常量表”,不会立即开辟空间。只有当对其取地址时,系统才会为其开辟空间。

示例:

#include <iostream>

using namespace std;

int main()
{
	const int data = 100;
	int *p = (int *)&data;
	*p = 2000;
	cout << "data = "<<data << endl;
	cout << "*p = " << *p << endl;
	
	return 0;
}

输出:

data = 100
*p = 2000

在这里插入图片描述
(2)如果以变量初始化const修饰的只读变量,那么只读变量会立即开辟空间,此时就没有符号常量表。
示例:

#include <iostream>

using namespace std;

int main()
{
	int a=10;
	const int data = a;
	int *p = (int *)&data;
	*p = 2000;
	cout << "data = "<<data << endl;
	cout << "*p = " << *p << endl;
	
	return 0;
}

输出:

data = 2000
*p = 2000

(3)const修饰自定义类型变量,立即开辟空间,此时也没有符号常量表。

二、register修饰寄存器变量

我们都知道,CPU访问寄存器的速度比内存快到多。
在这里插入图片描述
如果变量被高频使用,系统会自动将变量存储在寄存器中,目的是提高访问效率。

如果用户想将变量直接放在寄存器中,可以使用register修饰。例如:

register int data=0;

注意,尽量不要对寄存器变量取地址,因为寄存器是没有地址的。register修饰的变量只是尽量将变量放入寄存器,而不是一定能够放入寄存器中,因为寄存器是很珍贵的。

三、volatile强制访问内存

强制访问内存,防止编译器优化。使对变量的访问必须每次都从内存上取。

volatile int data=0;

在这里插入图片描述

四、sizeof测试类型的大小

C++的sizeof关键字用于测试类型、变量或表达式占用的存储空间大小,其语法为:

sizeof (类型/变量/表达式)

其中,类型可以是任意C++数据类型,变量和表达式必须是已经定义或声明过的。

对于不同的类型,sizeof返回的值也会不同。下面是一些常见类型的sizeof值示例:

sizeof(char)      // 1
sizeof(short)     // 2
sizeof(int)       // 4
sizeof(long)      // 32位平台是4字节,64位平台是8字节
sizeof(float)     // 4
sizeof(double)    // 8
sizeof(bool)      // 1
sizeof(pointer)   // 4 or 8 (depending on the system)

需要注意的是,sizeof返回的值以字节为单位。在不同的编译器和操作系统中,sizeof返回的值可能会略有差异。

五、typedef关键字

C++的typedef关键字是用来为已有类型定义一个新的别名,可以方便地使用这个别名来代替原有的类型名称。不会创建新的类型。

操作步骤:

  1. 先用已有的类型定义一个变量,例如:
int num;
  1. 用别名替换变量名,例如:
int INT32;
  1. 在整个表达式最前面加typedef,例如:
typedef int INT32;

示例:

typedef int myInt;
myInt x = 10; // 等价于 int x = 10;

另外,typedef也可以用来定义复杂类型的别名,如指针、数组、结构体等。

例如:

typedef int* IntPointer;
IntPointer p; // 等价于 int* p;

typedef int IntArray[5];
IntArray a = {1,2,3,4,5}; // 等价于 int a[5] = {1,2,3,4,5};

typedef struct {
    int age;
    char name[20];
} Person;
Person p1 = {18, "Tom"}; // 定义一个Person结构体

总结

C++中的一些重要关键字:

  1. auto:用于自动推断变量类型。

  2. const:用于定义常量,表示变量的值不可更改。

  3. static:用于静态变量和静态函数的声明。

  4. extern:用于声明在其他文件中定义的全局变量或函数。

  5. inline:用于行内函数的定义。

  6. friend:用于声明友元函数或友元类。

  7. virtual:用于定义虚函数,实现多态性。

  8. new/delete:用于动态分配和释放内存。

  9. try/catch/throw:用于异常处理。

  10. typedef:用于给已有类型定义一个别名。

  11. template:用于泛型编程和模板类的定义。

  12. namespace:用于命名空间的定义,避免命名冲突。

  13. explicit:用于构造函数声明,禁止隐式转换。

  14. mutable:用于类中成员变量的定义,表示该变量可以修改。

  15. operator:用于操作符重载。

  16. sizeof:用于返回数据类型或变量所占的字节数。

  17. typeid:用于获取对象的类型信息。

  18. volatile:用于声明易变变量,防止编译器进行优化。

  19. register:用于将变量存储在CPU寄存器中,提高访问速度。

在这里插入图片描述

举报

相关推荐

0 条评论