随笔分类 -  c++

摘要:C++中常见的面试题. 题目: 关于C++中, 四种类型转换的关键字, 的详解, 也可以给出代码, 判断输出 或 判断哪些代码有误. 答案及范例如下: 四种关键字: const_cast, 常量性转除;dynamic_cast, 向下安全转型;reinterpret_cast, 重新解释转型; st 阅读全文
posted @ 2023-06-19 11:49 imxiangzi 阅读(56) 评论(0) 推荐(0)
摘要:C++多态的原理 (虚函数指针和虚函数表)1.虚函数指针和虚函数表2.继承中的虚函数表2.1单继承中的虚函数表2.2多继承中的虚函数表3.多态的原理4.总结1.虚函数指针和虚函数表以下代码:问类实例化出的对象占几个字节? #include<iostream>using namespace std;c 阅读全文
posted @ 2023-06-19 11:33 imxiangzi 阅读(55) 评论(0) 推荐(0)
摘要:C++中的虚函数的作用主要是实现了多态,本人通过代码验证的方式了解虚表的结构及在多种继承方式下通过虚表访问子类函数。验证结果如下: 1)无虚函数覆盖的一般继承:可以通过子类的虚表访问父类的函数 2)虚函数重载父类的虚表:子类重载的虚函数会覆盖父类的函数 3)多重继承无重载的虚表:多重继承子类的虚表就 阅读全文
posted @ 2023-06-19 10:12 imxiangzi 阅读(150) 评论(0) 推荐(0)
摘要:最近在做测试,在大型程序中,模板类型加上继承关系搞得我混乱,还好有tpyeinfo帮助捋顺关系。 typeInfo与typeid简单总结说明: 和sizeof这类的操作符一样,typeid是C++的关键字之一。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件ty 阅读全文
posted @ 2023-06-16 10:17 imxiangzi 阅读(558) 评论(0) 推荐(0)
摘要:问题描述先看代码 #include <iostream>#include <string>using namespace std; class A{public: virtual string toString() { return typeid(this).name(); } friend ost 阅读全文
posted @ 2023-06-16 10:16 imxiangzi 阅读(63) 评论(0) 推荐(0)
摘要:在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++ 阅读全文
posted @ 2023-06-16 10:16 imxiangzi 阅读(75) 评论(0) 推荐(0)
摘要:C++的四种类型转换之const_cast 前言 引用《Effective C++ 中文版第三版》中条款27 "尽量少做转型动作"中的一段话: C++规则的设计目标之一是,保证“类型错误”绝对不可能发生,理论上如果你的程序很“干净”的通过编译,就表示它并不企图在任何对象上执行任何不安全、无意义、愚蠢 阅读全文
posted @ 2023-06-14 22:24 imxiangzi 阅读(544) 评论(0) 推荐(0)
摘要:一. 函数描述:const_cast < type-id > ( expression )主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。 去掉const属性:const_case<int*> (&num),常用,因为不能把一个const变量直接赋给一个非con 阅读全文
posted @ 2023-06-14 22:23 imxiangzi 阅读(338) 评论(0) 推荐(0)
摘要:const_cast转换运算符我们在RTTI和类型转换运算符中详细介绍过它的用法和使用场景,今天我们对其进一步了解一下。首先我们回忆一下它的作用和用法。 const_cast的基本使用const_cast运算符用于执行只有一种用途的类型转化,即改变const或volatile。 用法如下: cons 阅读全文
posted @ 2023-06-14 22:22 imxiangzi 阅读(136) 评论(0) 推荐(0)
摘要:顶层const&底层const: 普通变量没有底层顶层的区别; int const a == const int a 只有对应指针,引用才会有区别:指针常量->顶层const,指针本身不可被修改。 int * const b = &a,a既可以通过a = x来改变,也可以通过*b = x来改变,但不 阅读全文
posted @ 2023-06-14 22:21 imxiangzi 阅读(214) 评论(0) 推荐(0)
摘要:原文C++ const_cast用法 const_cast是一种C++运算符,主要是用来去除复合类型中const和volatile属性(没有真正去除)。 变量本身的const属性是不能去除的,要想修改变量的值,一般是去除指针(或引用)的const属性,再进行间接修改。 用法:const_cast<t 阅读全文
posted @ 2023-06-14 22:01 imxiangzi 阅读(84) 评论(0) 推荐(0)
摘要:在复习C++过程中,遇到了“常量折叠”,突然很是困惑,清楚地记得当时的理解就是:可折叠的常量和宏一样。其实在慢慢写学习中,就会知道这样的理解未免有些片面。现在才真正的觉得,每次看的时候都会有不同的感受,我想知识的魅力就在于此。 当时的理解就可以用下面的程序看看: #define PI 3.14 in 阅读全文
posted @ 2023-06-14 21:50 imxiangzi 阅读(29) 评论(0) 推荐(0)
摘要:一,前言 有关C++语言的const常量的考察点:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配区是很普通的栈或者全局区域。也就是说const常量只是编译器在编译的时候做检查,根本不存在什么read-only的区域。 所以说C++的const常量和常量字符 阅读全文
posted @ 2023-06-14 21:50 imxiangzi 阅读(104) 评论(0) 推荐(0)
摘要:关于C++中地址值打印出来为1的情况;以下是测试代码: #include <iostream>#include <iomanip> using namespace std; int main(){ const volatile int a = 10; cout << &a <<endl; int * 阅读全文
posted @ 2023-06-13 09:41 imxiangzi 阅读(86) 评论(0) 推荐(0)
摘要:constexptr和常量表达式常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。 编译过程中得到计算结果。 字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定。 (注意!!!)对于这条语句:c 阅读全文
posted @ 2023-05-25 09:21 imxiangzi 阅读(125) 评论(0) 推荐(0)
摘要:1.用constexpr修饰变量 1.1 const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量,举一个简单的例子: void func(const int num) { const int count = 24; int array[num] 阅读全文
posted @ 2023-05-25 09:18 imxiangzi 阅读(332) 评论(0) 推荐(0)
摘要:C++中const和constexpr的作用很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用 const关键字const修饰变量这是最基本的一种用 阅读全文
posted @ 2023-05-25 09:17 imxiangzi 阅读(238) 评论(0) 推荐(0)
摘要:constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化: constexpr int mf = 20; //20是常量表达式constexpr int limit = mf + 1; // mf 阅读全文
posted @ 2023-05-25 09:16 imxiangzi 阅读(8876) 评论(0) 推荐(0)
摘要:1. 常量表达式 是指值不会改变,并且在编译过程就能得到计算结果的表达式。这是很大的优化:假如有些事情可以在编译时做,它将只做一次,而不是每次程序运行时都计算。 1)字面值常量是常量表达式,如123,'a',3.14等。 2)跟字面值常量相关的一些表达式也是常量表达式,如123+3.14,2<<2等 阅读全文
posted @ 2023-05-25 09:16 imxiangzi 阅读(86) 评论(0) 推荐(0)
摘要:constexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义。 所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将 阅读全文
posted @ 2023-05-25 09:14 imxiangzi 阅读(53) 评论(0) 推荐(0)