当前位置: 首页 > 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…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...