C++基础知识学习,防卫式文件头,变量初始化定义,auto,引用·,常量的问题,constexpr编译时求值常量

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40666620/article/details/102757113
防卫式文件头

如果你创建了一个文件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;
}

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102757113