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

每日十问9c++-内存模型和名称空间

每日十问9c+±内存模型和名称空间

1.对于下面的情况,应使用哪种存储方案? a.homer 是函数的形参。
b. secret变量由两个文件共享。
c.topsecret 变量由一个文件中的所有函数共享,但对于其他文件来说是隐藏的。 d. beencalled 记录包含它的函数被调用的次数。习题解析:
a.函数的形参是自动变量的形式,因此 homer 变量的存储方案是自动存储。
b.若多个文件共享一个变量,应当在一个文件内将其定义为外部变量,其存储形式是静态外部链接。在其他需要使用 secret 变量的文件中使用 extern 关键字声明。
c.若 topsecret变量在一个文件内共享且不能被其他文件访问,应当使用内部链接的静态变量,或者可以在未命名的名称空间中进行定义。
d.函数的函数体内定义的变量通常为自动变量,为了保存函数被调用次数,beencalled需要使用本地静态变量来实现这个功能。

2.using 声明和 using 编译指令之间有何区别?
解析:
using 声明可以单独使用名称空间中某个特定的名称,其作用域与 using 所在的声明区域相同。using 编译指令使名称空间中的所有名称可用。如果在全局中使用 using 编译指令,将使该名称空间中的名称在全局可用;如果在函数定义中使用 using 编译指令,将会在该函数中使该名称空间可用。此外,在名称冲突时,两者也会有部分差异,例如,名称空间和 using 声明的区域存在相同的名称,如果在该区域中使用 using 声明导入名称,则两个名称会发生冲突而出错。另外,如果使用 using 编译指令,则该区域的局部版本名称将会隐藏名称空间的版本。因此很多情况下认为 using 声明只导入需要的部分名称,它在使用上比 using编译指令要更安全。

3.重新编写下面的代码,避免使用 using 声明和 using 编译指令。

#include using namespace std; int main(){
double x;
cout<<“Enter value:”: while(!(cin>>x)){
cout<<“Bad input.Please enter a number:” cin.clear();
while(cin.get()!=‘\n’)
continue;
cout<<“Value=”<<x<<end1; return 0;
解析:
题目给定的程序代码中主要使用了 std 名称空间中的内容,如果不使用 using 声明和编译指令,那么可以直接在 std 内的名称前添加作用域运算符 std::。这里主要使用的名称包括 cin、cout、endl,因此修改后的代码如下。
#include int main(){
double x;
std::cout<<“Enter value:”; while(!(std::cin>>x)){
std::cout<<“Bad input.Please enter a number:”; std::cin.clear();
while(std::cin.get()!=‘\n’)
continue;
std::cout<<“Value=”<<x<<std::endl; return 0;
}

4.重新编写下面的代码,使之使用 using 声明,而不是 using 编译指令。

#include using namespace std;

int main()l
double x;
cout<<“Enter value:”; while(!(cin>>x)){
cout<<“Bad input.Please enter an umber:”; cin.clear();
while(cin.get()!=‘\n’)
continue;
cout<<“Value=”<<x<<endl;

解析:
为了使用 using 声明替代 using 编译指令,需要查询当前函数或者文件使用了哪些名称,并依次声明,本程序主要使用了 cin、cout、endl 这3个名字,因此要使用以下 using 声明。
using std::cout;

using std::cin;

using std::endl;

完整代码如下。

#include int main(){
using std::cout;

using std::cin; using std::endl;

double x;
cout<<“Enter value:”;

while(!(cin>>x)){
cout<<“Bad input.Please enter a number:”; cin.clear();
while(cin.get()!=‘\n’)
continue;
cout<<“Value=”<<x<<endl;

}

5.在一个文件中调用 average(3,6)函数时,它返回两个int型参数的 int 型平均值;在同一个程序的另一个文件中调用时,它返回两个 int 型参数的 double 型平均值。应如何实现?
解析:
在同一个程序的不同文件中使用不同函数,且由于两个 average()函数的参数相同(即特征标相同),因此不能重载函数。解决方案是定义不同的名称空间,调用时使用作用域解析;或者在每个文件中包含单独的静态函数定义,限制其是内部链接函数。

6.下面的程序由两个文件组成,该程序显示什么内容?

//filel.cpp
#include

using namespace std; void other(); void another(); int x=10; int y;
int main(){
cout<<x<<endl;{
int x=4;
cout<<x<<end1; cout<<y<<endl;
other(); another();
return 0; 208有这个bau juop
:bie pnisu
void other(){ aiai:bte painu
int y=1;
cout<<“Other:”<<x<<“,”<<y<<endl;

//file2.cpp
()nien anl
#include using namespace std; extern int x; namespace{
int y=-4;}
void another(){
cout<<“another () :”<<x<<“,”<<y<<endl;

}
解析:
为了分析该程序的输出,首先查看 main ()函数内的语句。
cout<<x<<endl;语句输出本文件内外部链接的静态变量 x,所以程序会输出10。
接下来的3条语句在一个单独的语句块内,该语句块中定义的x隐藏了外部链接的x,因此赋值后输出 4,y值未被隐藏,这时使用外部链接的静态变量y,输出结果是初始化结果 0。
other();语句调用文件内的函数other(),该函数内部定义的局部变量隐藏了外部变量 y,但x依然使用外部变量 x,输出结果为:other:10,1。
another();语句调用外部文件中的函数 another(),该函数在 file2.cpp 中,该文件使用了 filel.cpp 中的x变量,但是在文件的名称空间中定义了y=-4,因此 other()函数的x为filel.cpp 内外部链接的x变量,y为 file2.cpp 内无链接的变量y,输出结果为another():10-4。

所以最终显示如下内容。

10

4

0
Other:10,1

another():10-4

7.下面的代码将显示什么内容?#include

using namespace std;

void other();

namespace n1

{
int x=1;

}

namespace n2

{

int x=2;

}

int main(){
using namespace nl;

cout<<x<<endl;
(
int x=4;
cout<<x<<", “<<n1: :x<<”, "<<n2: :x<<endl;

}

using n2::x;

cout<<x<<endl; other();

return 0;

}

void other(){
using namespace n2;

cout<<x<<endl;

{
int x=4;

cout<<x<<“,”<<n1::x<<“,”<<n2::x<<endl;

}

using n2::x;

cout<<x<<endl;
}
解析:
为了分析该程序的输出,首先查看 main()函数内的语句。

● using namespace nl;

cout<<x<<endl;
在main()函数的前两条语句中,声明了名称空间n1,因此第2条语句的输出x为n1

内定义的 x,所以输出 1。
{
int x=4;
cout<<x<<“, “<<n1::x<<”,”<<n2::x<<endl; }
以上语句首先定义了一个语句块,块内定义的变量x会隐藏其他名称空间中的同名变量,cout 输出语句中,通过作用域运算符指定的名称空间不会被块内的局部变量隐藏。因此输出 4,1,2。
using n2::x; cout<<x<<endl;
以上两条语句首先通过 using 声明使用 n2 内的名称,因此 cou 输出 2。
other( );
以上语句调用函数 other()。函数内声明了名称空间 n2,因此首先输出2。
在函数内的语句块中,再次造成名称的隐藏,因此输出局部变量x和作用域运算符修饰的 x,即输出4,1,2。
函数最后再次使用 usingn2::x,上一个语句块内局部变量的生命周期结束,不会造成名称的冲突或隐藏,因此输出 2。
最终程序输出以下结果。

1

4,1,2

2

2
4,1,2

2

相关文章:

每日十问9c++-内存模型和名称空间

每日十问9c内存模型和名称空间 1.对于下面的情况&#xff0c;应使用哪种存储方案? a.homer 是函数的形参。 b. secret变量由两个文件共享。 c.topsecret 变量由一个文件中的所有函数共享&#xff0c;但对于其他文件来说是隐藏的。 d. beencalled 记录包含它的函数被调用的次数…...

【python】JSON数据类型与Python数据类型之间的转化

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录JSON格式文件JSON格式序列化与反序列化作用JSON常用数据结构键值对的集合值的有序列表JSON数据类型与Python数据类型之间的转化JSON格式和python的区别读写json文件dump 把python 写到json文件load 把json写…...

Spring——什么是事务?传播行为?事务隔离级别有哪些?

思维导图一、什么是事务&#xff1f;多条DML要么同时成功&#xff0c;要么同时失败Transaction&#xff08;tx&#xff09;二、事务的四个过程&#xff1a;开启事务&#xff08;start transaction&#xff09;执行核心业务代码提交事务&#xff08;如果核心业务处理过程中没有出…...

【项目实战】使用Feign服务间相互调用,其实OpenFeign也没有想象中那么难嘛

一、Feign介绍 openfeign是一个java的http客户端,用来简化http调用 二、Feign架构(来自官方) Feign由五大部分组成, 由于刚开始接触 feign ,比较关注的 clients 跟 encoders/decoders 三、OKHTTP与Feign之间的关系 在Feign中,Client是一个非常重要的组件,Feign最终…...

tun驱动之ioctl

struct ifreq ifr; ifr.ifr_flags | IFF_TAP | IFF_NO_PI; ioctl(fd, TUNSETIFF, (void *)&ifr); 上面的代码的意思是设置网卡信息&#xff0c;并将tun驱动设置为TAP模式。在TAP模式下&#xff0c;在用户空间下调用open打开/dev/net/tun驱动文件&#xff0c;发送(调用send函…...

[acwing周赛复盘] 第 93 场周赛20230304

[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了&#xff0c;只A…...

NOIP2022 T4 比赛

P8868 [NOIP2022] 比赛 题目大意 有两个长度为nnn的序列aaa和bbb&#xff0c;有qqq次询问&#xff0c;每次询问给出l,rl,rl,r&#xff0c;求 ∑ilr∑ji1r(max⁡kijak)(max⁡lijbl)\sum\limits_{il}^r\sum\limits_{ji1}^r(\max\limits_{ki}^ja_k)\times(\max\limits_{li}^jb_l…...

计算机组成原理

目录 ❤ 控制器 ❤ 运算器 ❤ 控制器运算器(计算机的中央处理器CPU) ❤ 存储器 内存(主存) 外存 内存和外村的区别 ❤ 输入设备 ❤ 输出设备 ❤ 适配器 ❤ 总线 ❤ 启动计算机的流程 ❤ 机械硬盘 ❤ 固态硬盘 python从小白到总裁完整教程目录:https://b…...

1. 命名规范

1. 命名规范 成绩10开启时间2021年09月17日 星期五 18:00折扣0.8折扣时间2021年11月6日 星期六 00:00允许迟交否关闭时间2021年11月21日 星期日 00:00 家有家法&#xff0c;行有行规。在家有家的规矩&#xff0c;入行有行的规矩。我们计算机一行就有一个命名的规矩&#xff0c;…...

论文投稿指南——中文核心期刊推荐(新闻事业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…...

【Linux】工具(4)——make/Makefile

本期博客我们的任务就是搞懂自动化构建工具——make/Makefile一、什么是make/Makefile&#x1f4cc;make是一个命令工具&#xff0c;是一个解释makefile中指令的命令工具&#xff0c;一般来说&#xff0c;大多数的IDE都有这个命令&#xff0c;比如&#xff1a;Delphi的make&…...

【企业服务器LNMP环境搭建】nginx安装

1、介绍&#xff08;官方网址&#xff1a;nginx news &#xff09; 1.1 常见用法 1) web服务器软件 httpd http协议 同类的web服务器软件&#xff1a;apache nginx(俄罗斯) IIS(微软 fastcgi) lighttpd(德国) 2)代理服务器 反向代理 3)邮箱代理服务器 IMAP POP3 SMTP 4)负载均…...

Linux 配置规范 操作系统 _S3A3G3

目录 1.检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议 2.检查账户认证失败次数限制...

基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【C语言进阶:指针的进阶】回调函数

本章重点内容&#xff1a; 字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析什么是回调函数&#xff1a; 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作…...

C++模板的使用

在平时的工作和学习过程中&#xff0c;经常会用到泛型&#xff0c;这里对泛型和模板进行一下梳理&#xff0c;以便理解和使用。 模板关键字 template。为什么要使用模板? 假如设计一个两个参数的函数,用来求两个对象的乘积,在实践中我们可能需要定义n多个函数 int multipli…...

三天Golang快速入门—面向对象

面向对象Golang接口的定义go中类空接口空接口作为函数的参数切片实现空接口map的值实现空接口类型断言值接收者和指针接收者值接收者指针接收者接口嵌套Golang接口的定义 接口interface是一种抽象的类型。接口定义了一个对象的行为规范&#xff0c;只定义规范不实现&#xff0…...

开发手册——一、编程规约_6.并发处理

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】获取单例对象需要保证线程安全&#xff0c;其中的方法也要保证线程安全。 说明&#xff1a;资源驱动类、工具类、单例工厂…...

ACM---大一第三周周赛(Floyd算法+并查集算法学习周)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…...

spring整合mybatis和Junit

该项目使用spring纯注解方式开发&#xff0c;用配置类取代spring的配置文件 一、导入依赖 整合Junit需要导入spring-test 整合mybatis需要导入spring-jdbc、mybatis-spring <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-cont…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...