C++入门到放弃
【目录】
- C++关键字
- 命名空间
- C++输入&输出
- 缺省参数
- 函数重载
- 引用
- 内联函数
- auto关键字(C++11)
- 基于范围的for循环(C++11)
- 指针空值-- - nullptr(C++11)
- 总结
1. C++关键字
关键字(keyword)又称保留字,是整个语言范围内预先保留的标识符。每个C++关键字都有特殊的含义。经过预处理后,关键字从预处理记号(preprocessing - token)中区别出来,剩下的标识符作为记号(token),用于声明对象、函数、类型、命名空间等。不能声明与关键字同名的标识符。
各个版本的ISO C++都规定以下划线接大写字母或下划线起始的标识符保留给实现,编译器可以用这些保留标识符作为扩展关键字,这不保证可移植性。
ISO C++98 / 03关键字共63个, C++11关键字共73个,不一一列举。
2. 命名空间
在C / C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
2.1空间命名
2.1.1普通空间命名
namespace Test1 //命名一个名叫"Test"的空间
{ //空间里可以定义函数,也可以定义变量
int Add(int a, int b)
{
return a + b;
}
}
2.1.2空间命名嵌套
namespace Test2
{
int x;
int y;
namespace Test2_1
{
int Add(int a, int b)
{
return a + b;
}
}
}
2.1.3
同一个工程中允许存在多个相同名称的命名空间编译器最后会合成同一个命名空间中。
2.2命名空间的使用
命名空间有三种使用方式
第一种:加命名空间名称及作用域限定符
int main()
{
int ret = Test1::Add(1, 2); //"::"为作用域限定符,表明使用 "Test1" 空间里的Add函数
printf("%d\n", ret);
system("pause");
return 0;
}
第二种:使用using将命名空间中成员引入(部分开放)
using Test2::Test2_1::Add; //只使用 "Test2" 空间中的 "Test2_1" 中的 "Add" 函数
int main()
{
int ret = Add(1, 2); //此处可直接使用 "Add" 函数,即上方所述 "Test2_1" 作用域中的Add函数
printf("%d\n", ret);
system("pause");
return 0;
}
第三种:使用using namespace 命名空间名称引入(全开放)
using namespace Test1; //相当于“打开” "Test1" 空间,可以直接使用此空间里的所有函数 / 变量,不需要加"::"
int main()
{
int ret = Add(1, 2);
printf("%d\n", ret);
system("pause");
return 0;
}
比如C++中常见的 using namespace std;
std 是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用std来限定。
使用using namespace 命名空间名称引入了之后,就可以直接写 cout 而不用写成 std::cout ,更加简洁。
至于为什么将cout放到名字空间std中,是因为像cout这样的对象在实际操作中或许会有好多个,比如说你自己也可能会不小心定义一个对象叫cout,那么这两个cout对象就会产生冲突。
3.C++输入&输出
- 使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。
注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用< iostream > +std的方式。- 使用C++输入输出更方便,不需增加数据格式控制,比如:整形–%d,字符–%c
int main()
{
int a;
double b;
char c;
cin >> a; //输入数据到a
cin >> b >> c; //数据到b和c
cout << a << endl; //输出a的数据
cout << b << " " << c << endl; //输出b和c,中间以空格间隔
return 0;
}
“<<” 和 “>>” 形象的描绘出了数据向控制台(cout)和键盘向变量(cin)的数据流向。
int main()
{
cout << "Hello World!" << endl; //"endl" 即为换行,作用与 "\n" 相同
printf("Hello World!\n"); //这两句代码执行结果相同
system("pause");
return 0;
}
4.缺省参数
4.1缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
例:
void TestFunc(int a = 0)
{
cout << a << endl;
}
int main()
{
TestFunc(); // 没有传参时,使用参数的默认值
TestFunc(10); // 传参时,使用指定的实参
}