首页 > 编程语言 >从C到C++

从C到C++

时间:2024-05-16 20:33:12浏览次数:15  
标签:std main const int C++ using include

const关键字用法

(1)定义常量

#include <iostream>
using namespace std;
int main() {
	const int MAX_VAL = 23;
	const double Pi = 3.14;
	const char* SHOOL_NAME = "SDWU";
	return 0;
}

(2)定义常量指针

不可以通过常量指针修改指向的内容.

#include <iostream>
using namespace std;
int main() {
	int n = 10, m = 20;
	const int*p = &n;
//	*p = 30;编译出错
	n = 30;//可以通过原本的变量名来修改
	p = &m; //常量指针的内容可以变化.
	return 0;
}

不能把常量指针赋值给非常量指针,反过来可以

#include <iostream>
using namespace std;
int main() {
	int n = 10, m = 20;
	const int*p1 = &n;
	int*p2 = &m;
	p1 = p2;
//	p2 = p1;编译不过,不能随便将const类型的指针赋值给非const类型
	p2 = (int*)p1;//但是进行了强制类型转换就可以了

	return 0;
}

函数参数为常量指针时,可以避免函数内部不小心改变参数指针所指地方的内容

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
void My_print(const char*p) {
//	strcpy(p, "abc");编译出错
	printf("%s", p);
}
int main() {
	//不能随便将const char*随便赋值给char*
	const char*p = "SDWU";
	My_print(p);
	return 0;
}

(3)定义常引用

不能通过常引用修改其引用的变量

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int n = 10;
	const int &r = n;
//	r=20;编译不过
	n = 30;
	cout << r << '\n';
	return 0;
}

内存的动态分配

使用new运算符实现内存的动态分配

image-20240516201003503

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int *p;
	//返回值为int*类型
	p = new int;
	*p = 5;
	cout << *p << '\n';
	return 0;
}

image-20240516201247960

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p;
	int i = 5;
	p = new int[i * 20];
	p[0] = 55;
	p[100] = 30; //数组越界
	cout << p[100] << '\n';
	return 0;
}

使用delete运算符释放动态内存空间

image-20240516201842920

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p = new int;
	*p = 30;
	delete p;
//	delete p;释放第二次程序崩溃
	//一片空间不能被delete两次
	return 0;
}

image-20240516202101197

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p = new int[10];
	p[0] = 1;
	delete[]p;
//必须前面加括号才能动态分配的元素释放干净
	return 0;
}

标签:std,main,const,int,C++,using,include
From: https://www.cnblogs.com/harper886/p/18196677

相关文章

  • C++_交叉编译和pybind11
    编译本地编译和交叉编译本地编译当前平台编译交叉编译交叉编译是指在一个平台上编译另一个平台上运行的代码。在C++中,交叉编译通常涉及以下步骤:安装交叉编译工具链。配置编译环境。使用工具链编译代码。首先,确保安装了交叉编译工具链,例如gcc-arm-l......
  • C++模板编程-enable_if
    std::enable_if的使用对于重载的函数或者函数模板的选择上,编译器内部有一个自己的规则,并不是简单粗暴的对函数就优先选择,对函数模板就靠后选择替换失败并不是一个错误(SFINAE):SubstitutionFailureIsNotAnError,SFINAE看成是C++语言的一种特性或者说一种模板设计中要遵循的......
  • 深度解读《深度探索C++对象模型》之C++虚函数实现分析(三)
    “深度解读《深度探索C++对象模型》”系列已经在CSDN上和我的公众号上更新完毕,请有需要的同学移步到我的CSDN主页里去阅读,主页地址:https://blog.csdn.net/iShare_Carlos?spm=1010.2135.3001.5421或者敬请关注我的公众号:iShare爱分享前面两篇请从这里阅读:深度解读《深度探索C+......
  • 《Effective C++》第三版-5. 实现(Implementations)
    目录条款26:尽可能延后变量定义式的出现时间(Postponevariabledefinitionsaslongaspossible)条款27:尽量少做转型动作(Minimizecasting)条款28:避免返回handles指向对象内部成分(Avoidreturning“handles”toobjectinternals)条款29:为“异常安全”而努力是值得的(Striveforexc......
  • C++:自定义异常
    #include<iostream>#include<stdexcept>//自定义异常类classMyException:publicstd::exception{public://重写what()函数以提供异常的描述,const表示函数不会改变类的成员变量,noexcept表示不会抛出异常constchar*what()constnoexceptoverride{......
  • C++ 对象池
    对象池概念对象池模式(ObjectPoolPattern),是创建型设计模式的一种,将对象预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少频繁创建对象所占用的内存空间和初始化时间。对象池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非......
  • C++基础篇
    输入输出流iostream向流写入数据<<运算符<<运算符接受两个运算对象,此运算符将给定的值写到给定的ostream对象中:左侧:运算对象为ostream对象,如cout、cerr、clog右侧:运算对象是要打印的值输出结果:写入给定值的那个ostream对象,即此运算符返回其左侧的运算对象。表达式等价于:(std......
  • msvc 获取c++类内存布局 /d1 reportAllClassLayout
     visualstudio配置获取所有类内存布局/d1reportAllClassLayout或者指定类/d1reportSingleClassLayoutXXXclass  编译时输出:     ps:https://www.openrce.org/articles/full_view/23   【原文地址】https://blog.csdn.net/qq_29542611/article......
  • linux下使用c++模拟下载进度
    #include<iostream>#include<iomanip>#include<chrono>#include<thread>voidshowProgressBar(doubleprogress){constintbarWidth=70;std::cout<<"\r[";intpos=static_cast<int>(barWid......
  • C++封装dll(__cdecl和__stdcall)
    【1】使用__stdcall还需要添加def文件编译,使用工具DEPENDS.EXE打开dll文件成功。【2】使用__cdecl直接编译即可,不需要导入def文件......