|
|
善良的创口贴 · 从零开始一起学习SLAM | 你好,点云 ...· 1 年前 · |
|
|
活泼的领结 · Exceptions 和 Return - 知乎· 2 年前 · |
|
|
高大的佛珠 · react 修改循环数组对象的数据_ts ...· 2 年前 · |
下面列出了数据类型修饰符:
signed:表示变量可以存储负数。对于整型变量来说,signed 可以省略,因为整型变量默认为有符号类型。
unsigned:表示变量不能存储负数。对于整型变量来说,unsigned 可以将变量范围扩大一倍。
short:表示变量的范围比 int 更小。short int 可以缩写为 short。
long:表示变量的范围比 int 更大。long int 可以缩写为 long。
long long:表示变量的范围比 long 更大。C++11 中新增的数据类型修饰符。
float:表示单精度浮点数。
double:表示双精度浮点数。
bool:表示布尔类型,只有 true 和 false 两个值。
char:表示字符类型。
wchar_t:表示宽字符类型,可以存储 Unicode 字符。
修饰符 signed、unsigned、long 和 short 可应用于整型, signed 和 unsigned 可应用于字符型, long 可应用于双精度型。
这些修饰符也可以组合使用,修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如: unsigned long int 。
C++ 允许使用速记符号来声明 无符号短整数 或 无符号长整数 。您可以不写 int,只写单词 unsigned、short 或 long , int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。
signed int num1 = -10; // 定义有符号整型变量 num1,初始值为 -10 unsigned int num2 = 20; // 定义无符号整型变量 num2,初始值为 20 short int num1 = 10; // 定义短整型变量 num1,初始值为 10 long int num2 = 100000; // 定义长整型变量 num2,初始值为 100000 long long int num1 = 10000000000; // 定义长长整型变量 num1,初始值为 10000000000 float num1 = 3.14f; // 定义单精度浮点数变量 num1,初始值为 3.14 double num2 = 2.71828; // 定义双精度浮点数变量 num2,初始值为 2.71828 bool flag = true; // 定义布尔类型变量 flag,初始值为 true char ch1 = 'a'; // 定义字符类型变量 ch1,初始值为 'a' wchar_t ch2 = L'你'; // 定义宽字符类型变量 ch2,初始值为 '你'为了理解 C++ 解释有符号整数和无符号整数修饰符之间的差别,我们来运行一下下面这个短程序:
当上面的程序运行时,会输出下列结果:
-15536 50000上述结果中,无符号短整数 50,000 的位模式被解释为有符号短整数 -15,536。
类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。
限定符含义 const const 定义常量,表示该变量的值不能被修改。。 volatile修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。。 restrict由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 mutable 表示类中的成员变量可以在 const 成员函数中被修改。 static 用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。 register 用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。const int NUM = 10; // 定义常量 NUM,其值不可修改 const int* ptr = # // 定义指向常量的指针,指针所指的值不可修改 int const* ptr2 = # // 和上面一行等价
volatile int num = 20; // 定义变量 num,其值可能会在未知的时间被改变
菠萝1988
pxf***ple@163.com
volatile boolean isNext = false; Thread A() { // 第一个工作 // isNext = true; Thread B (){ if (isNext) { // 第二个工作这里volatile 就是从来标记isNext, 以确保线程B每次都重新从内存中读取isNext的值,第二个工作一定在第一个工作之后进行。
但是要注意,这里无法保证顺序性,应该编译器编译的时候会重新打乱两个语句的先后顺序,因此做第一个工作和赋值给isNext不一定会按照你代码顺序正常执行。
菠萝19886年前 (2017-09-21)菠萝1988
pxf***ple@163.com
arzel
123***789@qq.com
小阔爱
294***292@qq.com
adults
223***32@qq.com
#include<iostream> using namespace std; int main() const float PI = 3.14; PI = 3; //尝试修改 PI 的值,将会出现错误提示。 float radius = 10.0; float area = PI * radius * radius; float circumference = 2 * PI * radius; cout << "area is "<<area <<", circumference is "<< circumference<<endl; return 0;adults5年前 (2018-11-01)adults
223***32@qq.com
|
|
活泼的领结 · Exceptions 和 Return - 知乎 2 年前 |