当前位置: 首页 > news >正文

论坛网站有哪些上海专业优化排名工具

论坛网站有哪些,上海专业优化排名工具,北京专业做网站推广,做网站登录的需求分析跟CZY一起深入理解C些基础知识 常量constconstexpr 初始化枚举与枚举类分离编译 常量 const 常量亦即不可改变的量(实际上可以暴力破解),那么常量在C中主要有以下几种应用场景 定义常量变量 //如果有以下情况,在GCC上能够破解,而在MSVC上不会改变 // int放在栈区,实际上是可…

跟CZY一起深入理解C++些基础知识

  • 常量
    • const
    • constexpr
  • 初始化
  • 枚举与枚举类
  • 分离编译

常量

const

常量亦即不可改变的量(实际上可以暴力破解),那么常量在C++中主要有以下几种应用场景

  • 定义常量变量
//如果有以下情况,在GCC上能够破解,而在MSVC上不会改变
// int放在栈区,实际上是可以修改的,const是一种用户层的限制
const int  CN = 300;
int* b = const_cast<int*>(&CN);
*b = 100;
static const int CN = 100;
//如果有以下情况,会直接导致coredump,无论在MSVC还是GCC上结果都一致
//原因在于static const 在静态常量区,这个区是无论如何也不能被修改的,修改会直接导致coredump的发生
int* b = const_cast<int*>(&CN);
*b = 100;
  • 定义常量指针
///const 修饰指针的指向,指针可变,指针指向的对象不可变
const int* ptrToConst = &myConstVar;
  • 定义指针常量
///const修饰指针,指针不可变,指针指向的对象可变
int* const constPtr = &myVar;
  • 定义常量引用
/// 由于引用本身就是不可改变所引用的对象的
///故常量引用是指引用所指的对象不可变
const int& constRef = myVar;
  • 常量成员函数
class MyClass {
public:void regularFunction() {// 可以修改成员变量myVar = 10;}void constFunction() const {// 不能修改成员变量,只能读取///	这里刚好介绍一下mutable的相关知识/// 若myVar前面加上了mutable关键字,那么在常量成员函数中可以修改///最常见的场景就是常量成员函数需要加锁的情况,互斥量在加锁过程中是///需要修改的,所以要用mutable修饰互斥量使得常量成员函数中也能加上锁int x = myVar;}
private:int myVar;
};
  • 对函数参数进行修饰
void func(const a,const b){
///对参数的修饰见上文,语义是一致的	
}

constexpr

有了const为什么还需要constexpr呢,constexpr代表的其实是一种期望语义,告诉编译器该值有可能在编译期间算出来,那么编译器就会尽可能的在编译期算出来,见下面的例子

constexpr int getArrSize(int a,int b){return a + b;
}constexpr int A = 30;
constexpr int B = 30;
int main()
{constexpr int arrSize  = getArrSize(A,B);///这里arrSize的值能够在编译器确定,因此可以申明这样的数组///而如果getArrSize的返回值不用constexpr申明,那么将不再通过编译int arr[arrSize];std::cout << sizeof(arr)/sizeof(int) << std::endl;getchar();return 0;
}

总结:constexpr提高了C++在编译时的计算能力,并且能用更加简洁的方式进行模板元编程,测验,constexpr到底在哪个区呢,实际上constexpr的内存区域存储位置取决于其声明的位置

初始化

等值初始化和花括号初始化都是常见的初始化形式
更加推荐{}初始化,理由有以下几点,

  • 传统的初始化(=初始化),会尝试隐式转换.这可能造成精度丢失等问题
int a = 3.7;//ok
int a{3.7};//compiler error
  • 可读性更好

但要注意转化成initial_list的问题

枚举与枚举类

更加推荐使用枚举类
假设存在下面场景

enum class Color{Red = 0;Black = 1;
};
enum class TraficLight{Red = 1;Green = 0;
};

如果不用enum class 那么就会上报一个Red重定义的错误,而且enum class 也避免了如下的情况发生

Color = TraficLight::Red;//error
int c = Color::Red;///error

这避免了很多程序中潜在的错误,你可以为枚举类定义运算符,例如

enum class Light {Red = 2,Black
};
Light& operator++(Light& t){switch(t){case(Light::Red):{t = Light::Black;return t;}}return t;
}

分离编译

c++支持分离编译的概念,用户代码只看见类型和函数声明,定义被放在分离的源文件中,被分别编译,将编译时间降低到最少,一个库可以理解成一组分离编译的代码的集合
在这里插入图片描述
如上图所示,user.cpp和Vector.cpp共享Vector.h的接口,但是编译的过程是分离开来的

http://www.bjxfkj.com.cn/article/102735.html

相关文章:

  • linux 如何做网站贵州seo学校
  • 网站内部链接怎麽做西安seo排名优化推广价格
  • 济南 微网站谷歌google浏览器官方下载
  • 沈阳seo专业培训福建seo
  • 网站字体样式网站建设流程步骤
  • 做电影网站 广告收入搜索引擎优化的英语简称
  • 夜间网址你会回来感谢我的青海百度关键词seo
  • 国外设计素材appseo模拟点击工具
  • drupal 网站实例技成培训网
  • 做网站的人跑了网站可以恢复吗培训推广 seo
  • 广州有哪些做网站专业的公司东莞网站推广哪里找
  • 怎么做qq靓号网站百度推广视频
  • 株洲做网站哪家好优化疫情防控
  • 优酷土豆网站建设疫情死亡最新数据消息
  • 邯郸中国建设银行网站整站优化要多少钱
  • 网站怎么样做采集别人网站的文章郑州网站优化外包
  • 网站开发的总结重庆seo推广外包
  • 业余学做衣服上哪个网站免费推广seo
  • 黄图网站有哪些 推荐百度seo提高排名费用
  • 中企动力销售好出单吗seo网站营销公司哪家好
  • 外贸网站建设价格html网页设计模板
  • 在国内怎么做国外网站网站竞价推广怎么做
  • 网站开发下人员配置互联网营销师报考条件
  • 哈尔滨网站开发公司电话孝感seo
  • 绍兴模板建站公司线上招生引流推广方法
  • 手机搞笑网站模板下载安装网上怎么做推广
  • 有没有好的网站是JSP做的网络销售怎么找客户
  • 手机怎样建立网站免费网站建设哪家好
  • 沙井网站制作联系电话搜索量最大的关键词
  • 外贸网站有哪些seo入门版