C++之常量

因为ns3是用的C++编写的,但是C++我学过之后过了很长时间了又忘记了所以找了网上一个教程,这里主要是那个教程的翻译:
教程链接:http://www.cplusplus.com/doc/tutorial/constants/,大家可以去看原文
常量是具有固定值的表达式。
数字是最明显的常量。它们用于表示程序源代码中的特定值。我们已经在前面的章节中使用了一些来给变量赋予特定值或表达我们希望我们的程序打印出来的消息,例如,当我们写下
例如
a = 5;
的5在这一段代码是一个常量。
数字常量可以分为:整数,浮点,字符,字符串,布尔值,指针和用户定义的数字。

除了十进制数(我们大多数人每天使用的数字)之外,C ++还允许使用八进制数(基数8)和十六进制数(基数16)作为文字常量。对于八进制文字,数字前面带有0(零)字符。对于十六进制,它们前面是字符0x(零,x)。例如,以下文字常量都彼此相同:

 1   75         // decimal十进制
 2   0113       // octal八进制
 3  0x4b       // hexadecimal十六进制

所有这些代表相同的数字:75(七十五)分别表示为基数为10的数字,八进制数字和十六进制数字。
这些文字常量有一个类型,就像变量一样。默认情况下,整数文字是类型int。但是,某些后缀可能会附加到整数文字以指定不同的整数类型:(不会在CSDN上画表格)
后缀 类型修饰符
u or U unsigned
l or L long
ll or LL long long
无符号可以任何顺序与任何其他两个组合以形成unsigned long或unsigned long long。
例如:
75 // int
75u // unsigned int
75l // long
75ul // unsigned long
75lu // unsigned long
在上述所有情况中,可以使用大写或小写字母指定后缀。
浮点数字
它们用小数和/或指数表示实际值。它们可以包括小数点,一个e字符(表示“在第X个高度十”,其中X是一个跟在e字符后面的整数值),或者是小数点和一个e字符:

3.14159    // 3.14159
6.02e23    // 6.02 x 10^23
1.6e-19    // 1.6 x 10^-19
3.0        // 3.0  

这是以C ++表示的四个有小数的有效数字。第一个数字是PI,第二个是阿伏伽德罗数,第三个是电子的电荷(一个非常小的数) ,最后一个是数字3表示为一个浮点数字。
浮点文字的默认类型是double。可以通过添加以下后缀之一来指定类型float或的浮点文字long double:
后缀 类型
f or F float
l or L long double
例如:

3.14159L // long double
6.02e23f // float
3.2569 //double
字符和字符串常量
字符和字符串文字用引号括起来:
例如:

'z'
'p'
"Hello world"
"How do you do?"
   前两个表达式表示单字符常量,后两个表示由多个字符组成的字符串常量。请注意,为了表示单个字符,我们将它括在单引号(')之间,如果想要表示一个字符串(通常由多个字符组成),我们将字符括在双引号(")之间。
   单字符和字符串文字都需要围绕它们的引号,以区别于可能的变量标识符或保留关键字。注意这两个表达式之间的区别:
   x
   'x'
   这里上一个单独的x(没有引号)在C++中代表可能是变量标识符,但是后者'x'(带单引号)代表一个单纯的字符x;
   字符和字符串文字也可以表示在程序的源代码中难以或不可能表达的特殊字符,如newline(\n)或tab(\t)。这些特殊字符都以反斜杠字符(\)开头。

这里有一个单字符转义码列表:(表格实在无爱,将就看吧)

代码	     描述
\n	     换行
\r	     回车
\t	     标签`在这里插入代码片`
\v	     垂直标签
\b	     退格
\f	     换页
\a	     警报(哔哔声)
\'	     单引号(')
\"	     双引号(")
\?	     问号(?)
\\	     反斜杠(\)

例如:
‘\n’
‘\t’
“Left \t Right”
“one\ntwo\nthree”
在 内部,计算机将字符表示为数字代码:最常见的是,它们使用ASCII字符编码系统的一个扩展名(有关详细信息,请参阅ASCII代码)。字符也可以使用其数字代码在文字中表示,方法是写一个反斜杠字符(\)后跟表示为八进制(base-8)或十六进制(base-16)数字的代码。对于八进制值,反斜杠直接跟随数字; 而对于十六进制,在反斜杠和十六进制数字本身之间插入一个x字符(例如 \x20 or \x4A)。
可以将多个字符串文字连接起来形成单个字符串文字,只需将它们分隔一个或多个空格,包括制表符,换行符和其他有效的空白字符。例如:

   "this forms" "a single"     " string "
   "of characters"

以上是一个字符串文字,相当于:

 
"this formsa single string of characters"

请注意引号中的空格如何是文字的一部分,而它们之外的空格则不是。

一些程序员还使用一种技巧在多行中包含长字符串文字:在C ++中,行尾的反斜杠(\)被认为是一个行继续符,它将该行和下一行合并为一行。因此以下代码:

x = "string expressed in \
two lines"

相当于:x = "string expressed in two lines"
上面描述的所有字符文字和字符串文字都是由char类型的字符组成的。可以使用以下前缀之一指定不同的字符类型:

字首	        字符类型
u	        char16_t
U	        char32_t
L	        wchar_t

请注意,与整数文字的类型后缀不同,这些前缀区分大小写。
字符串常量,除了上述的u,U以及L,两个额外的前缀存在:

字首	描述
u8	字符串文字使用UTF-8在可执行文件中编码
R	字符串文字是一个原始字符串

在原始字符串中,反斜杠和单引号和双引号都是有效字符; 文字的内容由首个R“后的(和最后一个)”,其中是任何字符序列(包括空序列)。字符串的内容是括号内的内容,忽略了”()“序列本身。例如:

R"(string with \backslash)"
R"&%$(string with \backslash)&%$"

上面的两个字符串相当于"string with \backslash"。该R前缀可以与任何其他的前缀,如结合u,L或u8。

其他常量:
三个关键字文字在C ++中存在:true,false和nullptr:

  • true并且false是bool类型变量的两个可能值。

  • nullptr是空指针值。

    bool foo = true;
    bool bar = false;
    int* p = nullptr;

常量表达式的输入
有时,为常量值命名是很方便的:

const double pi = 3.1415926;
const char tab = '\t';

然后我们可以使用这些名称而不是直接写它们:

#include <iostream>
using namespace std;

const double pi = 3.14159;
const char newline = '\n';

int main ()
{
  double r=5.0;               // radius
  double circle;

  circle = 2 * pi * r;
  cout << circle;
  cout << newline;
}

结果是:31.4159

预处理器定义(#define)

命名常量值的另一种机制是使用预处理器定义。它们具有以下形式:

#define identifier replacement

在此指令之后,identifier代码中的任何出现都被解释为replacement,其中replacement是任何字符序列(直到行的结尾)。此替换由预处理器执行,并在编译程序之前发生,从而导致一种盲目替换:不以任何方式检查所涉及的类型或语法的有效性。
例如:

#include <iostream>
using namespace std;

#define PI 3.14159
#define NEWLINE '\n'

int main ()
{
  double r=5.0;               // radius
  double circle;

  circle = 2 * PI * r;
  cout << circle;
  cout << NEWLINE;

}

其结果是:
31.4159
请注意,这些#define行是预处理程序指令,因此是单行指令,不像C ++语句最后不需要分号(;),该指令自动延伸到行尾。
若有错漏请包含,可以发表在评论区,之后我看到会改正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值