版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
防卫式文件头
如果你创建了一个文件head1.h和head2.h,如下:
head1.h
#include "head2.h"
int abc1 = 2;
head2.h
int abc2 = 2;
然后再main中如下:
#include "test1.h"
#include "test2.h"
using namespace std;
int main()
{
cout<<abc2<<endl;
}
这样会报错“abc2重复定义",因为你在head1.h中引用了head2.h,此时head1.h中也有了abc2,然后你又在main中同时引用这两个h文件,所以重复定义,那么如何解决这个问题呢?
防卫式文件头
head1.h
#ifndef __HEAD1__H__
#define __HEAD1__H__
#include "head1.h"
int abc1 = 1;
#endif
head2.h
#ifndef __HEAD2__H__
#define __HEAD2__H__
int abc2 = 2;
#endif
变量初始化定义
//定义的时候初始化,{},=号可以有可以没有
int abc{ 1 };
int abc2 = { 1 };
for (int i{ 0 }; i < 10; i++)
{
std::cout << i << std::endl;
}
for (int i = { 0 }; i < 10; i++)
{
std::cout << i << std::endl;
}
//数组定义,定义的时候初始化
int array1[] = { 1,2,3,4,5,6 };
//初始化定义,类型转换直接报错
int a1 = 12.4f;
//int a2{ 12.4f };//无法编译成功
auto
auto:变量的自动类型推断,可以在声明变量的时候,根据变量的初始值,可以自动判断合适的类型
auto自动类型判断,发生在编译期间,不会造成程序执行效率降低
引用
可以理解为为变量起另一个名字
实际上不是同一块内存,但是表现像是同一块内存 他们之间值的改变是互相影响的
int value = 10;
int& valueAlias = value;
value++;
cout << valueAlias << endl;
valueAlias++;
cout << value << endl;
常量的问题
const标识不变的意思
const int constA = 7;//这个变量的值不会改变
//有意思的实验,debug的时候,constValue1和constValue2现实的是同一块内存,且都是11
//,但是输出的时候,constValue1是1,constValue2是11,所以引用应该占的是不同的内存
const int constValue1 = 1;
//强制转化为引用
int& constValue2 = (int&)constValue1;
//改变引用的值,看着const是要被改变了,debug的时候也确实改变了值
constValue2 = 11;
int myValue = constValue2;
//但是输出的时候任然是未改变,所以推出结论
cout << constValue1 << endl;
cout << constValue2 << endl;
cout << myValue << endl;
结论占的是不同的内存
constexpr
constexpr,常量,编译的时候求值,提升效率,C++11才引入
//常量函数
constexpr int func1()
{
int abc = 2;
return abc * 99;
}
int main()
{
constexpr int var1 = 12;
int b = 5;
constexpr int val2 = func1();
cout << val2 << endl;
}