C++学习笔记05-补充知识点(问题-解答自查版)

news2024/9/23 15:26:03

前言

以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点

Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。

本文对读者可以用作自查,答案在后面,需要时自行对照。


问题集

Q15:C++中,float a = 5.5; 语句创建的变量a是float型还是double型?如何指定float?

Q16:bool型变量在class中的大小是1bit还是1byte?为什么?

Q17:#pragma once 和 #ifndef 比起来,有没有不好处?

Q18:#include中,尖括号和""的区别?

Q19:关于VS调试,这个黄色箭头在这里的时候,是否执行这一句了?

Q20:如何理解 “实际上没有什么else if语句”?

Q21:bool型变量可以存储bool表达式吗?

Q22:引用到底是不是变量?

Q23:static变量其实只区分两种,是哪两种?

Q24:为什么不要用global全局变量?

Q25:这个类内Static变量定义,有什么问题没有?(一定要注意)

class MyEntitywithOneStaticProp{
public:
    static int x,y;    //声明

};
int MyEntitywithOneStaticProp::x = 1;    //定义
int MyEntitywithOneStaticProp::y = 2;    //定义:绑定了一个分配过的变量

Q26:解释一下类内静态函数为什么不能调用类的普通成员变量?

Q27:说函数体内和体外的static变量没有很大不同,为什么?

Q28:C++中的枚举,如何限定其使用的整形数类型?

Q29:比较好的访问数组元素个数的方式

Q30:这段代码有什么问题?(注意传字符串进函数会如何)

Q31:入参有const,指针或引用,我们在调用GetX()方法的时候,为什么有时候会报错?

Q32:为什么说对类内方法进行列表初始化,而不是从方法中赋值,可以提升性能?

Q33:两种初始化的区别——是不是一个返回指针,一个返回对象本身?

Q34:offset含义?


参考解答

Q15:C++中,float a = 5.5; 语句创建的变量a是float型还是double型?如何指定float?

A15:默认可能是float(4字节),也可能是double(8字节),这个取决于编译器设置。

像cherno的环境下出来就是double,而我是float。

指定float的方法:float a = 5.5f

Q16:bool型变量在class中的大小是1bit还是1byte?为什么?

A16:1byte,即1字节。

Q17:#pragma once 和 #ifndef 比起来,有没有不好处?

A17:这俩东西基本等效,而 #pragma once 是一种后来支持的比较新的格式,基本所有的IDE都会支持他

所以 #pragma once 就足够了,确保 .h 文件不被重复定义

Q18:#include中,尖括号和""的区别?

        < >只包含编译器当前目录," "可以是相对路径:

        #include"../lib/tree.h"

Q19:关于VS调试,这个黄色箭头在这里的时候,是否执行完这一句了?

A19:没有,还在这里,处于将要执行的状态。

Q20:如何理解 “实际上没有什么else if语句”?

A20:else if 实际上是两个语句放在了一起

Q21:bool型变量可以存储bool表达式吗?

A21:我们可以 bool result = 1 < 2;   但是要注意这只不过是计算结果。

        bool 型变量不能直接存储表达式本身,它只能存储表达式计算后的结果。

        如果需要存储表达式本身,可以使用字符串或者其他数据结构来表示表达式。

Q22:引用到底是不是变量?

A22:cherno认为不是变量,至少不是新变量。

        事实上,它的机制意在为已存在的变量提供了另一个名字,本身没有自己的存储空间,只是所引用变量的一个别名。通常用于函数参数传递,以允许函数修改实际的参数值,或者用于简化代码,使代码更加清晰。

Q23:static变量其实只区分两种,是哪两种?

A23:类内static和类外static

在C++中,static 关键字有几种不同的用法,每种用法都有其特定的意义和用途:

1、函数内部静态变量:

        在函数内部使用static关键字声明的变量,其生命周期贯穿整个程序,而不是仅限于函数调用期间。这意味着即使函数调用结束,静态变量的值也会保持不变,直到程序结束。用途:尤其是在需要跨函数调用保持状态但又不希望使用全局变量的情况下。

void function() {
    static int count = 0; // 静态变量
    count++;
    std::cout << "Count: " << count << std::endl;
}

        每次调用function()时,count的值都会递增,并且保持之前的值。

2、静态成员变量:

        类中的静态成员变量属于类本身,而不是类的任何特定实例。这意味着所有类的实例共享同一个静态成员变量。

        用途:共享数据,多个对象需要共享同一份数据时,静态成员变量可以作为一个中央存储点。eg:配置信息,实例数量计数器

class MyClass {
public:
    static int value; // 静态成员变量
};

int MyClass::value = 0; // 定义和初始化静态成员变量

        任何MyClass的实例都可以访问和修改value,但value是共享的。

3、静态成员函数:

        类中的静态成员函数可以被类本身调用,而不需要类的实例。它们不能访问非静态成员变量,因为它们与类的任何特定实例无关。

class MyClass {
public:
    static void staticFunction() {
        std::cout << "This is a static function." << std::endl;
    }
};

MyClass::staticFunction(); // 直接通过类名调用静态成员函数

4、静态全局变量与静态全局函数:

        在文件作用域中声明的静态变量,其作用域限制在该文件内,不会被其他文件访问。

        static的含义:防止跨翻译单元的链接,避免用全局变量,其设计思想有点类似于class中的private

Q24:为什么不要用global全局变量?

A24:项目一旦大起来,全局变量就是灾难

Q25:这个类内Static变量定义,有什么问题没有?(一定要注意)

class MyEntitywithOneStaticProp{
public:
    static int x,y;

};

A25:这不是定义,这只不过是声明,完整的做法如下 :

class MyEntitywithOneStaticProp{
public:
    static int x,y;    //声明

};
int MyEntitywithOneStaticProp::x = 1;    //定义
int MyEntitywithOneStaticProp::y = 2;    //定义:绑定了一个分配过的变量

Q26:解释一下类内静态函数为什么不能调用类的普通成员变量?

A26:结合A25,类内static函数在class外定义的时候,就明白为什么不能调用x和y了,作用域之内没有普通成员变量的来源,没法知道他们是什么。

Q27:说函数体内和体外的static变量没有很大不同,为什么?

下面两个有什么区别?

A27:区别不大,只不过二者的作用域不同而已

        第一个作用域在函数内

        第二个作用于在当前文件

        两者都可以在整个程序中拥有全声明周期,为此的另一个例子如下,构造一个单例模式的有效引用(而不是运行后释放)

Q28:C++中的枚举,如何限定其使用的整形数类型?

A28:

enum e_Types : unsigned char{  //这里指定了类型是uchar,只占用8bit整型数,无需使用32位int
    A,B,C, D=6        //ABC自动等于123,而D是编程者指定的数值
};
// 调用
e_Types eval = A;
e_Types eval = 6;    // 注意,这种情况是不被允许的,失去了enum设计的初衷,会直接报错

Q29:比较好的查询数组元素个数的方式?(提示:不要通过元素内容、找结束符等方式去数)

A29:

Q30:这段代码有什么问题?(注意传字符串进函数会如何)

A30:执行了一次拷贝。而这个对于仅仅是打印的功能来讲,有点太损失性能了

正确的做法是传递一个常量引用,避免拷贝的同时确保不会修改到他。

Q31:入参有const,指针或引用,我们在调用GetX()方法的时候,为什么有时候会报错?

A31:const entity& e是一个常对象,要保证这个常对象不能被改变,因此调用的必须是常函数

注意:常对象只能调用常函数是必须的,如果有需要在常函数中执行成员属性的变化,可以对属性施加mutable

Q32:为什么说对类内方法进行列表初始化,可以提升性能

A32:

Q33:两种初始化的区别是不是一个返回指针,一个返回对象本身?

A33

Q34:这段代码中,offset的含义?

A34:获得内存中某个属性相对于初始地址的偏移量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

55 华三模拟器Server2 操作

华三模拟器Server2 操作 # /etc/config/dhcp uci set dhcp.eth2dhcp uci set dhcp.eth2.interfaceeth2 uci set dhcp.eth2.start100 uci set dhcp.eth2.limit150 uci set dhcp.eth2.leasetime12h # /etc/config/network uci set network.eth2interface uci set network.eth2.pr…

可爱萌《奥咕和秘密森林》,电脑单机游戏免费分享

《奥咕和秘密森林》是一款2D冒险游戏&#xff0c;游戏中玩家将与奥咕宝宝一起探索一个奇妙的世界。这款游戏的特点包括手绘角色和多种谜题&#xff0c;玩家可以在游戏中与激萌的小动物成为朋友&#xff0c;打败异界怪物&#xff0c;揭开未知世界的秘密。 游戏特色 探索世界&am…

宁德时代社招SHL入职测评:语言理解数字推理测评及综合测评真题、高分攻略、答题技巧

宁德时代的社招入职测评主要采用SHL的Verify系统&#xff0c;测评内容包括语言理解、数字推理、逻辑推理等部分。具体来说&#xff0c;语言理解部分包括阅读理解、逻辑填空和语句排序等题型&#xff0c;要求在限定时间内完成一定数量的题目 。数字推理部分则包括数字序列、数学…

JavaScript 数组排序

JavaScript 提供了多种对数组进行排序的方法&#xff0c;其中最常见和直接的是使用数组的 .sort() 方法。.sort() 方法可以对数组的元素进行排序&#xff0c;并返回排序后的数组。然而&#xff0c;.sort() 方法默认将数组元素转换为字符串&#xff0c;并按照字符串的 Unicode 编…

【Python】数据类型之字典(上)

字典是有序、键不重复且元素只能是键值对的可变的一个容器。 data{"k1":1,"k2":25} data中“k1”和“k2”是键&#xff0c;而1,25是值。“k1”:1,"k2":25是键值对。 1&#xff09;&#xff09;容器&#xff1a;存储多个元素。 2&#xff09;…

2024年港澳台联考高校新一波录取分数线来啦

导读 在前面几次中&#xff0c;我们和大家分享了一些2024年港澳台联考高校最新的录取分数线。今天我们继续来看一批新的录取分数线吧&#xff01;景于行分享的数据基本上都是经过可靠验证的&#xff0c;大家可以放心参考。 上海大学 上海大学和深圳大学是近些年来&#xff0c;依…

haproxy的安装和服务信息

为什么要使用haproxy&#xff1f; 因为LSV无后端检测&#xff0c;当webserver有一台状态异常&#xff0c;则运作异常&#xff1b;所以用haproxy来解决。 haproxy是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器&#xff0c;它支持基于cookie的持久性&#xff0c;自动…

力扣-1两数之和2两数相加-2024/8/3

1、两数之和 解法一 暴力法&#xff08;2个for循环&#xff09; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for ii in range(len(nums)):for jj in range(ii1, len(nums)):if nums[ii]nums[jj] target:return [ii,jj]解法二 哈希表法…

具有并发功能的网页以及一点链表相关内容

最近学习内容&#xff0c;前几天做了个小项目&#xff0c;通过tcp与html构建具有并发功能的商城 具有以下功能&#xff1a; 1 登陆进入查询页面 2 搜索商品信息概述 3 查看商品详细信息 4 记录访客信息 5 注册新用户 主页如下 主页程序 程序的设计&#xff1a;将现实中大…

DELL EMC PowerStore1000T存储添加主机、映射LUN

本次操作是为了把存储的卷映射给VMware集群&#xff0c;存储网络协议为FC SAN&#xff0c;存储端和主机端均连接FC交换机&#xff0c;并且FC交换机已完成ZONE相关配置 具体操作过程如下&#xff1a; 一、DELL EMC PowerStore1000T添加主机 1、进入Web控制台&#xff0c;点击…

字符函数和字符串函数(C语言)

目录 一. 字符分类函数 二. 字符转换函数 三.多种函数的使用和模拟实现 3.1 strlen函数 3.2 strcpy函数 3.3 strcat函数 3.4 strcmp函数 3.5 strncpy strncat strncmp &#x1f35f;&#x1f9e3;结束了指针的学习&#xff0c;我们开始了字符串之旅&#xf…

【若依项目-RuoYi】掌握若依前端的基本流程

搞毕设项目&#xff0c;使用前后端分离技术&#xff0c;后端springBoot&#xff0c;前端vue3element plus。自己已经写好前端与后端代码&#xff0c;但想换一个前端界面所以使用到了若依&#xff0c;前前后后遇到许多坑&#xff0c;记录一下&#xff0c;方便之后能够快速回忆。…

创意指南丨VR游览沉浸式空间体验

欢迎来到我们制作的VR幻想世界。玩家的起点是一条蓝色水晶大道&#xff0c;让我们一起探索这个如梦似幻的境地。 在这条大道的两侧&#xff0c;漂浮着半透明的大水晶水母。它们轻盈地在空中飘动&#xff0c;仿佛在欢迎我们的到来。这条道路上方&#xff0c;一个个半圆环不停地…

人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对&#xff1f; 人脸身份证比对又称人证比对&#xff0c;实人比对&#xff0c;人像比对&#xff0c;输入姓名、身份证号码和头像照片&#xff0c;与公安库身份证头像进行权威比对&#xff0c;返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

iMovie Tutorial【iMovie 剪辑教程】

文章目录 项目字幕视频截取范围 显示进度条大小播放速度视频图层降噪转场设置转场时间 声音录制声音 分享导出文件 项目 字幕 视频 截取范围 i、o、e 显示进度条大小 播放速度 视频图层 例如&#xff1a;视频衔接、插入表情视频、头像对话 降噪 户外录制视频需要降噪。…

计算机学习

不要只盯着计算机语言学习&#xff0c;你现在已经学习了C语言和Java&#xff0c;暑假又规划学习Python&#xff0c;最后你掌握的就是计算机语言包而已。 2. 建议你找一门想要深挖的语言&#xff0c;沿着这个方向继续往后学习知识就行。计算机语言是学不完的&#xff0c;而未来就…

在ccs theia上用jlink下载烧录调试msp芯片配置

转载自ti官网的文章结合我自己的经历 将 Segger 编程器与 MSPM0 配合使用 1. 引言 本指南说明了如何将 Segger 编程器与 MSPM0 配合使用。 本文档不用于详细说明如何使用 Segger 工具。有关详细文档&#xff0c;请参阅相应的 IDE 或 Segger 文档。 2. 先决条件 用户应已下…

某个国外的真实XSS漏洞利用探寻

Background 在一次测试中&#xff0c;在git中找到部分的源码&#xff0c;发现可能存在xss问题&#xff0c;但是经过了一点处理&#xff0c;于是经过探寻思考&#xff0c;找到了bypass的方法&#xff0c;写下本篇文章 Part.1 从git到混淆 server头看见这个配置 基本是flask了,…

普中51单片机:DS18B20温度传感器操作指南(十三)

文章目录 引言电路图引脚讲解初始化时序写时序读时序温度变换温度读取完整代码 引言 DS18B20是一款单总线接口的数字温度传感器&#xff0c;仅需一个IO口即可实现数据通信。这里只对如何简单操作开发板的DS1802进行讲解&#xff0c;关于DS18B20温度传感器的详细操作原理&#…

矢量文件坐标转换:2000坐标系转换为wgs84坐标系,具体代码实现

最近在处理矢量样本的时候&#xff0c;遇到一些shp文件的坐标系为2000坐标&#xff0c;需要统一地把非WGS84坐标系的矢量转换为WGS84坐标系。 本文记录一下如何进行2000坐标系转化为wgs84坐标系的过程。 在处理矢量数据转换的过程中&#xff0c;有几个关键步骤确保了数据的有效…