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

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

Java数组Arrays操作全攻略

Arrays类的概述 Java中的Arrays类位于java.util包中&#xff0c;提供了一系列静态方法用于操作数组&#xff08;如排序、搜索、填充、比较等&#xff09;。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序&#xff08;sort&#xff09; 对数组进行升序…...

深度解析:etcd 在 Milvus 向量数据库中的关键作用

目录 &#x1f680; 深度解析&#xff1a;etcd 在 Milvus 向量数据库中的关键作用 &#x1f4a1; 什么是 etcd&#xff1f; &#x1f9e0; Milvus 架构简介 &#x1f4e6; etcd 在 Milvus 中的核心作用 &#x1f527; 实际工作流程示意 ⚠️ 如果 etcd 出现问题会怎样&am…...