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

网站建设 电话营销/百度云搜索引擎入口盘多多

网站建设 电话营销,百度云搜索引擎入口盘多多,重庆 做网站,做介绍的英文网站笼统的讲 constexpr 主要用于编译时期,const用于运行时,但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量,局部变量,函数参数,指针,引用,也可以修饰类成员函数&…

笼统的讲 constexpr 主要用于编译时期,const用于运行时,但实际上两者都可以同时用于编译时期和运行时。

const

const可以修饰全局变量,局部变量,函数参数,指针,引用,也可以修饰类成员函数,类成员变量,不可用于构造函数和析构函数。

被修饰的局部变量不可以修改,如果是类对象,则只可以调用 const 函数。

修饰类变量时,变量可以是static也可以是非static,static const int成员变量可以只声明不用定义,其他类型必须定义。

全局变量

const全局变量一般放在头文件中,对于基础类型(int、float)来说,如果没有取址操作,编译器会当作编译时变量。

const全局变量默认是static,只在当前cpp内可以用,其cpp内会报错。

// a.cpp
const int cn = 10; // cn 为static,其他cpp中不可用// b.cpp
extern const int cn; 
// 链接时会找不到 cn
// MSVC b.cpp.obj : error LNK2001: 无法解析的外部符号 "int const cn" (?cn@@3HB)

在const int cn 前面加上 extern const int cn可以让变量变成非static,此时其他cpp内可以使用。

// a.cpp
extern const int cn; // 加上后 cn 为非 static
const int cn = 10;// b.cpp
extern const int cn; 
// 可以正常使用 a.cpp 内的 cn

指针

指针可以两个地方添加const,const T* const p。第一个const代表p指向的内容不可修改,此时p指向的对象只可以调用const成员函数,第二个const代表p自身不可修改。

引用

引用前面可以添加const,const T& ref此时ref的对象只可以调用const成员函数。const T&可以指向右值,如果指向函数返回的临时对象,可以延长临时对象的生命周期,如下:

std::cout << "--- Right value life --------------" << std::endl;
class Base
{
public:explicit Base(int n) : n(n) { std::cout << "Base Construct, " << n << std::endl; }~Base() { std::cout << "Base Destruct, " << n << std::endl; }int n = 0;static Base fun(int n){ return Base(n); }
};{std::cout << "--- life begin -----" << std::endl;Base::fun(1);const Base& cbf = Base::fun(2); // 生命周期会被延长Base&& rbf = Base::fun(3); // 生命周期会被延长// const Base* bp = &Base::fun(4); // compile error, 不能对右值取地址std::cout << "--- life end -----" << std::endl;
}

输出结果

--- Right value life --------------
--- life begin -----
Base Construct, 1
Base Destruct, 1
Base Construct, 2
Base Construct, 3
--- life end -----
Base Destruct, 3
Base Destruct, 2

函数参数

const修饰函数参数时不要修饰变量自身,此时修饰是无效的,容易出现重定义。一般用于修饰指针或引用。

void fun(int n) {}
void fun(const int n) {} // 编译错误,与 上一个fun重定义void fun(int& n) {}
void fun(const int& n) {} // 没有问题,const int 变量会调用此函数

类成员函数

被const修饰的类成员函数其内部的this指针为const,函数内部不可修改变量,只能调用其他const修饰的成员函数。如果想要修改成员变量,可以把变量声明为mutable,或者使用const_cast把this指针变为非const。

class BC
{
public:void foo() { std::cout << "foo" << std::endl; }void bar() const { std::cout << "bar" << std::endl; }void fun(int n) const{this->bar(); // const 成员函数 std::cout << "fun: " << n << std::endl; // 可以读取变量this->m = 10; // 使用的mutable修饰,可以修改,this->foo(); // 非const成员函数 编译错误this->n = 3; // 编译错误const_cast<BC*>(this)->foo();const_cast<BC*>(this)->n = 4;}int n{};mutable int m{};
};

编译时

const int n = 10;
int array[n]; // n为编译时确定

constexpr

constexpr可修饰全局变量、局部变量、类static静态变量,指针,引用,函数,构造函数,类成员函数,if表达式,不可修饰类成员变量。

变量

constexpr修饰的变量具有const属性,不可修改,只能调用const成员函数。如果是修饰类对象必须要,类必须提供对应的 constexpr 构造函数。constexp变量通常是编译是的,如果有对变量进行取地址或调用成员函数,变量会变为运行时。

只能修饰类static静态变量变量,不可以修饰成员变量,修饰的static静态变量无需定义。

全局变量

constexpr全局变量默认是static的,通常放在头文件中,不可用extern引入到其他cpp中使用,如果想要设置为非static,需要加上inline。

constexpr int cn = 10; // static 变量,不同cpp内取地址值不一致inline constexpr int cn = 10; // 非 static 变量,不同cpp内取地址值一致

指针和引用

constexpr修饰的指针只表示当前指针变量是const,其指向的对象依然可以修改。对于引用和指针依然需要添加const来修饰用于指向const对象。

char str[] = "Hello World";
constexpr char* cec = str;cec[0] = 'h';
std::cout << cec << '\n'; // 输出:hello Worldint value = 10;
constexpr int* ptr = &value;
constexpr int& ref = value;const int cv = 20;
constexpr const int* cptr = &cv; // 需要加上const,否则会编译错误
constexpr const int& cref = cv; // 需要加上const,否则会编译错误

函数

constexpr可以在编译时运行,例如编译时计算数组长度,因为是编译时运行,所以实现必须在同一个cpp中,一般实现放在头文件中,类似于inline函数。constexpr函数如果传入的运行时参数,则会到运行时再执行。

constexpr int foo(int n)
{return 10*n;
}
int array[foo(10)];

类成员函数

constexpr修饰的构造函数表示当前类可以构造constexpr对象。

constexpr修饰的成员函数并不是const程序函数,只代表是可以编译时运行,如果想要是const属性依然要添加const。

constexpr成员函数也可以是set函数,用于编译时修改成员变量

class Vec2
{
public:constexpr Vec2()=default;constexpr Vec2(float x, float y) : x(x), y(y) {};constexpr float getX() const  { return x; }constexpr float getY() const { return y; }constexpr void setX(float x) { this->x = x; }constexpr void setY(float y) { this->y = y; }
private:float x{};float y{};
};constexpr Vec2 Add(const Vec2& lhs, const Vec2& rhs)
{Vec2 p; // 不能使用p.setX(lhs.getX() + rhs.getX());p.setY(lhs.getY() + rhs.getY());return p;
}// 使用示例
constexpr Vec2 p1 = {1, 2};
constexpr Vec2 p2 = {3, 4};
constexpr Vec2 p3 = Add(p1, p2);

if 表达式

编译时条件变量,内部的条件也必须是编译时能确定的,否则会报错。

if constexpr (sizeof(int) == 4)
{std::cout << sizeof(int) << std::endl;
}

相关文章:

C++ constexpr vs const

笼统的讲 constexpr 主要用于编译时期&#xff0c;const用于运行时&#xff0c;但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量&#xff0c;局部变量&#xff0c;函数参数&#xff0c;指针&#xff0c;引用&#xff0c;也可以修饰类成员函数&…...

【达梦数据库】存储过程调用实践案例-select

目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果&#xff0c;你不能直接使用EXECUTE IMMEDIATE&#xff0c;因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句&#xff08;…...

041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较

矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方&#xff0c;然后求和。 对于一个矩阵 A A A&#xff0c;其平方和定义为&#xff1a; sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…...

批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组

::TraceLines.bat goto :test1http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容 http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量&#xff1f; https://github.com/npocmaka/ba…...

嵌入式入门Day26

IO Day2 IO相关函数标准文件流指针缓冲区刷新时机作业 IO相关函数 time #include <time.h>time_t time(time_t *tloc);功能&#xff1a;返回1970年到现在的秒数参数&#xff1a;计算出来的秒数&#xff1b;返回值&#xff1b;成功返回1970年到现在的秒数&#xff0c;失…...

【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学

&#x1f609; 你好呀&#xff0c;我是爱编程的Sherry&#xff0c;很高兴在这里遇见你&#xff01;我是一名拥有十多年开发经验的前端工程师。这一路走来&#xff0c;面对困难时也曾感到迷茫&#xff0c;凭借不懈的努力和坚持&#xff0c;重新找到了前进的方向。我的人生格言是…...

Python_Flask04(牛马问答平台01)

项目名称&#xff1a;牛马问答平台 项目简介&#xff1a;1.主要用来给社会上的牛马们探讨老板的恶心之处。 2. 用来学习交流。 技术手段&#xff1a;Python3.x Flask render_template pymysql flask_sqlalchemy........ 注意该博客为迭代项目&#xff0c;于最后一期展示完整…...

Java转C之并发和多线程

提纲&#xff1a; 概念介绍与对比概述 简述Java与C在并发和多线程方面的核心区别解释C11标准、POSIX、C11 <threads.h>、Pthread等名词 Java多线程与并发回顾 线程、Runnable、ExecutorService概念说明同步关键字与工具类含义 C并发基础 没有Java式的内置线程类&#xf…...

针对一个系统的权限管理这样的业务场景,使用各设计模式解说

通义灵码 下面将介绍如何在Java中使用不同的设计模式来实现权限管理系统。每个设计模式都有其特定的应用场景和实现方式&#xff0c;我们将逐一讲解。 1. 单例模式 (Singleton Pattern) 应用场景&#xff1a;确保权限管理服务在整个系统中只有一个实例&#xff0c;避免重复创…...

Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout,Kotlin

Android AppCompatImageView View.Gone状态切换到View.VISIBLE重新layout&#xff0c;Kotlin import android.content.Context import android.util.AttributeSet import android.util.Log import androidx.appcompat.widget.AppCompatImageViewclass MyImageView : AppCompatI…...

在云上轻松部署达梦数据库

达梦数据库&#xff08;DM Database&#xff09;是由达梦数据库有限公司开发的一款关系型数据库管理系统&#xff08;RDBMS&#xff09;。作为国内领先的数据库产品&#xff0c;达梦数据库在政府、金融、能源、电信、交通、医疗、教育等多个行业得到广泛应用&#xff0c;尤其在…...

什么是厄尔米特(Hermitian)矩阵?

厄米矩阵&#xff08;Hermitian Matrix&#xff09;定义 在数学和物理中&#xff0c;厄米矩阵是满足以下条件的复方阵&#xff1a; A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中&#xff0c; A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置&#xff0c;即…...

React - useActionState、useFormStatus与表单处理

参考文档&#xff1a;react18.3.1官方文档 一些概念&#xff1a; React 的 Canary 和 Experimental 频道是 React 团队用于发布和测试新功能的渠道。 useActionState useActionState 是一个可以根据某个表单动作的结果更新 state 的 Hook。 const [state, formAction, isPe…...

v3账号密码登录随机图片验证码

安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值&#xff0c;若父组件没有传值&#xff0c;那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...

不只是请求和响应:使用Fiddler解读Cookie与状态码全指南(下)

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 不只是请求和响应&#xff1a;使用Fiddler抓包HTTP协议全指南(上)_fiddler 获取响应脚本-CSDN博客https://blog.csdn.net/Chunfeng6yugan/article/details/144005872?spm1001.2014.3001.5501 不只是请求和响…...

java+springboot+mysql游乐园管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的游乐园管理系统&#xff0c;系统包含管理员、员工、用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;登录后台&#xff1b;首页数据统计&#xff1b;员工管理&#xff1b;用户管理&#xff1b;游乐项目管理&…...

@RequestBody,getparameter,@RequestParam,@PathVariable之间的区别和联系

RequestBody、RequestParam、PathVariable和getParameter&#xff08;你提到的可能是Java Servlet API中的方法&#xff09;是用于处理HTTP请求参数的不同机制。它们各自有不同的用途和适用场景&#xff0c;下面将详细解释它们之间的区别和联系。 1. RequestBody 用途&#xf…...

Linx下自动化之路:Redis安装包一键安装脚本实现无网极速部署并注册成服务

目录 简介 安装包下载 安装脚本 服务常用命令 简介 通过一键安装脚本实现 Redis 安装包的无网极速部署&#xff0c;并将其成功注册为系统服务&#xff0c;开机自启。 安装包下载 redis-7.0.8.tar.gzhttp://download.redis.io/releases/redis-7.0.8.tar.gz 安装脚本 修…...

VMware虚拟机搭建和镜像配置

VMware虚拟机搭建和镜像配置 下载安装VMware 开始下载 更改安装路径&#xff0c;需要一个大空间的盘 更改后下一步 下一步后&#xff0c;选择不主动升级更新 一直下一步 直到安装完毕 输入许可密钥&#xff0c;我下载的版本是12&#xff0c;输入完成点击输入&#xff…...

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…...

深入详解人工智能机器学习常见算法——线性回归算法

深入解析线性回归算法 线性回归是机器学习和统计学中最基本、最常用的预测建模技术之一。它通过线性关系描述因变量与一个或多个自变量之间的联系&#xff0c;帮助我们进行数据建模和预测。本篇文章将详细介绍线性回归的基础知识、算法原理、核心概念、实现方法以及其在实际问题…...

Python 开发环境搭建

Python 开发环境搭建 flyfish 版本 Ubuntu 22.04.5 LTS PyTorch 2.5.1 cuda 12.4 python 3.12.7安装 Anaconda3 依赖 sudo apt-get install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6安装命令 …...

OpenCV相机标定与3D重建(9)相机标定函数calibrateCameraRO()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::calibrateCameraRO 是 OpenCV 中用于相机标定的函数&#xff0c;它允许固定某些点来进行更精确的标定。 函数原型 double cv::calibrateCa…...

flink终止提交给yarn的任务

接上文&#xff1a;一文说清flink从编码到部署上线 1.查看正在执行的flink 访问地址&#xff08;参考&#xff09;&#xff1a;http://10.86.97.191:8099/cluster/apps 2.终止任务 yarn application -kill appID 本文为&#xff1a; yarn application -kill application_17…...

算法刷题Day14:BM36 判断是不是平衡二叉树

题目链接 描述 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是…...

【Golang】Go语言编程思想(六):Channel,第一节,介绍Channel

Channel 下面的几个例子将会展示如何定义一个 channel&#xff1a; func chanDemo() {var c chan int // chan int 的含义是, c 是一个 channel, 里面的内容是 int// 上面的声明语句将会创建一个 nil channel, c nil, 它的作用将在 select 当// 中体现 }创建一个非 nil 的 c…...

【Flux.jl】 卷积神经网络

Flux.jl 是包含卷积神经网络的, 但是官方API文件中没有给出一个完整的程序框架, 只是对所需神经元给了局部解释, 此外对 model-zoo 模型动物园中的案例没有及时跟着 Flux.jl 的版本更新, 也无法运行出来结果。 因此本文搭建了一个完整可训练的卷积神经网络。 Conv 卷积算子…...

大模型在辅导场景的深度应用,猿辅导素养课推出启发性“AI作文通”

猿辅导集团旗下的飞象星球面向学校发布“飞象AI作文”&#xff0c;让教育大模型成为老师的AI批改助手、学生的写作助手。芥末堆注意到&#xff0c;猿辅导集团旗下的猿辅导素养课也推出了名为“AI作文通”的AI作文功能&#xff0c;已于7月正式大规模上线&#xff0c;在AI教育领域…...

深入了解架构中常见的4种缓存模式及其实现

4种缓存模式 随着应用程序的复杂性日益增加&#xff0c;缓存管理变得至关重要。缓存不仅能有效减轻数据库负载&#xff0c;还能显著提升数据访问速度。选择合适的缓存模式能够在不同的业务场景下发挥出最佳效果。 本文将详细介绍四种常见的缓存模式&#xff1a;Cache-Aside (…...