C++知识补充

说明,这个攻略不系统,仅供学习算法之前做一个小小的铺垫,可能经过一段时间,会更详细。此外,本博客还有一篇C语言总结,那个可能稍微系统一些,大家可以看看。

命名空间

一个复杂的程序可能会使用多个库,每个库都可以提供数百个类、对象和函数名。为解决可能出现的名称冲突的问题,让每一个库创建自己的命名空间。要引用一个命名空间内的某个符号,必须使用前缀(常用的std指C++标准库),或通过using语句来提供访问。

为避免名称冲突,专家建议尽量有选择性的使用using语句。

1
2
3
using namespace std;  //不建议
using std::cout;
using std::endl; //建议

另外,我们自己还可以通过namespace关键字来定义自己的命名空间。

1
2
3
4
namespace x1aolin{
double a = 9.9;
int b =3;
}

转义字符

  • \a 响铃。当该字符被打印时,计算机发出一个“嘟”的声音。
  • \b退格键。
  • \f换页。
  • \n换行。
  • \r回车。
  • \t水平制表。
  • \v 垂直制表。
  • \' \" \\ 打印斜杠后的那个字符。
  • \ddd 用八进制指定数值。
  • \xdd用十六进制指定数值。
  • \xdddd 两个字节的十六进制,这对于把字符输出宽字符是有用的。

宽字符串

在C++中打印和存储字符的标准方法是使用一个字节char来表示一个字符串中的每一个字符。这对于表示包含52个大写字母,小写字母,数字,空格,标点符号的英文是足够的,但它不足以表示许多其他语言。这就需要使用宽字符字符串,其中为每个字符分配了两个字节,这些字符串被实现为wchar_t的数组,也是用空值来终止的。

1
wchar_t wstr2[] = L"Two bytes per character.";

在使用这样的字符串时,可以使用\xdddd格式对非ASCII字符代码进行编码。

1
wchar_t a[] = L"\x10ff\x13e7";

原始字符串字面量

使用R前缀来使用原始的字符串字面量。当使用这个符号时,一个字符串按照它在源代码中出现的原样进行存储。

1
2
3
cout << R"(c:\root\bin\n\readme.txt)";
cout << "c:\\root\\bin\\n\\readme.txt";
cout << R"ppp(c:\root\bin\n\readme.txt)ppp"; //以上三个语句打印出来的效果相同

注:该技巧仅能够在支持C++11的环境中使用。其中,原始字符串必须用括号()括起来,括号的前后可以加其他字符串,所加的字符串会被忽略,并且加的字符串必须在括号两边同时出现。

decltype关键字

decltype关键字使用一个参数来指定一个类型。例如,如果n的类型为int,那么下面的内容就相当于int关键字,并且可以在任何可以使用int的文本中使用。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
int main()
{
int a = 1,b=3;
decltype(a) c = 4; //此时变量c的数据类型为int 大家可以复制看看效果
cout << c << endl;
cout << R"(c:\root\bin\n\readme.txt)"<<endl;
cout << "c:\\root\\bin\\n\\readme.txt";
std::cout << R"fooo(Hello, world!)fooo" << std::endl;
return 0;
}

typeid操作符

用于返回一个与其他typeid操作的结果进行比较的类型信息。

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a = 1;
double b = 2.4;
if(typeid(a+b) == typeid(double)){ //运行结果打印出ppp
cout<<"ppp";
}
return 0;
}

new 类型

从动态内存(堆)中创建原始类型或对象,并返回一个指向该对象的指针。如果内存分配失败,则抛出一个bad_alloc异常。为了避免内存泄露,当用完对象时,要注意进行删除。

1
2
3
4
int *p = new int;
*p = 5;
...
delete []p;
您的每一份支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------