在c语言中会有下面问题
上述代码中,全局变量rand 可能会命名冲突,如下图
此时编译失败,全局变量rand和stdlib.h
发生命名冲突。冲突可能有两种:
elk::rand
,就可以访问命名空间内部。using namespace std;
全部展可能会有以下冲突问题:
此时同时展开 elk bin出现了 命名冲突,所以在使用展开时,在工程中不能全部展开。
在c语言中 printf的使用很麻烦。在c++中引入了 cout cin 极大的加速了编程效率。在后面我们会对cout,cin进行深入探讨。下面演示如何使用:
缺省参数是声明函数和参数,提前为函数参数赋值一个参数。
缺省参数注意事项:
引用不是重新定义一个变量,而是给变量取一个别名。
常量的引用必须是权限的缩小,如下面程序:
在类型转换中,显示类型转换中:
此代码就会报错,原因如下:
将代码修改为具有const性质的:
#include <time.h>
using namespace std;
struct A { int a[10000]; };
void TestFunc1(A a) {}
void TestFunc2(A& a) {}
void TestRefAndValue()
{
A a{};
// 以值作为函数参数
size_t begin1 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc1(a);
size_t end1 = clock();
// 以引用作为函数参数
size_t begin2 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc2(a);
size_t end2 = clock();
// 分别计算两个函数运行结束后的时间
cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
}
int main()
{
TestRefAndValue();
return 0;
}
运行结果如下:
引用做返回值容易引起野引用问题。
int& Add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int& ret = Add(1, 2);
Add(3, 4);
cout << "Add(1, 2) is :"<< ret <<endl;
return 0;
}
因为c是临时变量,临时变量在出函数栈帧会自动释放。所以,不能还回临时变量。