每日十问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.对于下面的情况,应使用哪种存储方案? a.homer 是函数的形参。 b. secret变量由两个文件共享。 c.topsecret 变量由一个文件中的所有函数共享,但对于其他文件来说是隐藏的。 d. beencalled 记录包含它的函数被调用的次数…...
【python】JSON数据类型与Python数据类型之间的转化
注:最后有面试挑战,看看自己掌握了吗 文章目录JSON格式文件JSON格式序列化与反序列化作用JSON常用数据结构键值对的集合值的有序列表JSON数据类型与Python数据类型之间的转化JSON格式和python的区别读写json文件dump 把python 写到json文件load 把json写…...
Spring——什么是事务?传播行为?事务隔离级别有哪些?
思维导图一、什么是事务?多条DML要么同时成功,要么同时失败Transaction(tx)二、事务的四个过程:开启事务(start transaction)执行核心业务代码提交事务(如果核心业务处理过程中没有出…...
【项目实战】使用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); 上面的代码的意思是设置网卡信息,并将tun驱动设置为TAP模式。在TAP模式下,在用户空间下调用open打开/dev/net/tun驱动文件,发送(调用send函…...
[acwing周赛复盘] 第 93 场周赛20230304
[acwing周赛复盘] 第 93 场周赛20230304 一、本周周赛总结二、 4867. 整除数1. 题目描述2. 思路分析3. 代码实现三、 4868. 数字替换1. 题目描述2. 思路分析3. 代码实现四、4869. 异或值1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 彩笔了,只A…...
NOIP2022 T4 比赛
P8868 [NOIP2022] 比赛 题目大意 有两个长度为nnn的序列aaa和bbb,有qqq次询问,每次询问给出l,rl,rl,r,求 ∑ilr∑ji1r(maxkijak)(maxlijbl)\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 家有家法,行有行规。在家有家的规矩,入行有行的规矩。我们计算机一行就有一个命名的规矩,…...
论文投稿指南——中文核心期刊推荐(新闻事业)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
【Linux】工具(4)——make/Makefile
本期博客我们的任务就是搞懂自动化构建工具——make/Makefile一、什么是make/Makefile📌make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make&…...
【企业服务器LNMP环境搭建】nginx安装
1、介绍(官方网址:nginx news ) 1.1 常见用法 1) web服务器软件 httpd http协议 同类的web服务器软件:apache nginx(俄罗斯) IIS(微软 fastcgi) lighttpd(德国) 2)代理服务器 反向代理 3)邮箱代理服务器 IMAP POP3 SMTP 4)负载均…...
Linux 配置规范 操作系统 _S3A3G3
目录 1.检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议 2.检查账户认证失败次数限制...
基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【C语言进阶:指针的进阶】回调函数
本章重点内容: 字符指针指针数组数组指针数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组面试题的解析什么是回调函数: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作…...
C++模板的使用
在平时的工作和学习过程中,经常会用到泛型,这里对泛型和模板进行一下梳理,以便理解和使用。 模板关键字 template。为什么要使用模板? 假如设计一个两个参数的函数,用来求两个对象的乘积,在实践中我们可能需要定义n多个函数 int multipli…...
三天Golang快速入门—面向对象
面向对象Golang接口的定义go中类空接口空接口作为函数的参数切片实现空接口map的值实现空接口类型断言值接收者和指针接收者值接收者指针接收者接口嵌套Golang接口的定义 接口interface是一种抽象的类型。接口定义了一个对象的行为规范,只定义规范不实现࿰…...
开发手册——一、编程规约_6.并发处理
这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。 说明:资源驱动类、工具类、单例工厂…...
ACM---大一第三周周赛(Floyd算法+并查集算法学习周)
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石.CSDN 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:ACM周训练题目合集.CSDN 💬总结:…...
spring整合mybatis和Junit
该项目使用spring纯注解方式开发,用配置类取代spring的配置文件 一、导入依赖 整合Junit需要导入spring-test 整合mybatis需要导入spring-jdbc、mybatis-spring <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-cont…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
