首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

typedef和define具体的具体差别

比如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 假设你把#define语句中的数字9 写成字母g 预处理也照样带入。...int* int_ptr; int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符 这也说明了为什么以下观点成立 //QunKangLi...pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改 而const PINT p 是const int * p 锁的是指针p所指的对象。...另一篇 一、typedef的使用方法 在C/C++语言中,typedef经常使用来定义一个标识符及keyword的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef...有时非常easy搞不清楚与typedef两者究竟该用哪个好, #define INT int这种语句,用typedef一样能够完毕,用哪个好呢?

48710

【重学 C++】06 | C++该不该使用 explicit

文章首发【重学 C++】06 | C++该不该使用 explicit引言大家好,我是只讲技术干货的会玩code,今天是【重学C++】的第六讲,在 C++中,explicit关键字作用于类的构造函数类型转换操作符...精度丢失当将一个高精度的数据类型转换为低精度的类型时,可能会导致数据精度的丢失,还是以上面Im数据结构为例。...对象被错误回收经典例子就是智能指针了,我们在《03 |手撸C++智能指针实战教程》一节中也提到过,下面我们再来回顾一下。...operator bool 错误转换C++中,有种operator TypeName()的语法,用来将对象转换为指定的TypeName类型。...【重学C++】02 | 脱离指针陷阱:深入浅出 C++ 智能指针【重学C++】03 | 手撸C++智能指针实战教程【重学C++】04 | 说透C++右值引用、移动语义、完美转发(上)【重学C++】05

20600
您找到你想要的搜索结果了吗?
是的
没有找到

【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )

五、显示窗口 六、完整代码示例 七、相关资源 基于 【OpenGL】一、Visual Studio 2019 创建 Windows 桌面程序 ( Visual Studio Installer 安装 C+...windows.h> 下面的代码时 Visual Studio 创建桌面程序时 , 自动生成的头文件 , 其中包含了 windows.h 头文件 ; // header.h: 标准系统包含文件的包含文件, // 特定于项目的包含文件...: style : 窗口风格 ; lpfnWndProc : 设置消息响应函数 , 响应鼠标 , 键盘事件 ; cbWndExtra : 窗口是否需要额外空间 ; hInstance : 窗口实体...// ATOM MyRegisterClass(HINSTANCE hInstance) { // 注册窗口的结构体 WNDCLASSEXW wcex; // 设置结构体的大小...// ATOM MyRegisterClass(HINSTANCE hInstance) { // 注册窗口的结构体 WNDCLASSEXW wcex; // 设置结构体的大小

1.2K00

C++中的类型转换

explicit 三、常见面试题 零、前言 本章主要学习C++的四种类型转换 一、C语言的类型转换 概念及介绍: 在C语言中,赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时...,就需要发生类型转化 C语言中的两种形式的类型转换: 隐式类型转化:编译器在编译阶段自动进行,能,不能就编译失败 显式类型转化:需要用户自己处理 示例: void Test () {.../引用转换为子类对象的指针引用(动态转换) 向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则) 向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的...A tmp(1); A a2(tmp); A a2 = 1; } 三、常见面试题 说说C++4中类型转化的应用场景 static_cast,命名上理解是静态类型转换 使用场景: 用于类层次结构中基类和派生类之间指针引用的转换...用于基本数据类型之间的转换,把int转换为char,这种带来安全性问题由程序员来保证 使用特点: 主要执行非多态的转换操作,用于代替C中通常的转换操作 隐式转换都建议使用static_cast

1.9K20

规范你的C代码的10种方法

起初,我们会认为上面定义的结构是相同的,因此占据相同数量的内存。然而,而str_1占用12个字节,第二个结构只需要8个字节?这怎么可能呢?   ...请注意,在第一个结构,3个不同的4个字节被分配到三种数据类型,而在第二个结构的前4个自己char和short可以被采用,int可以采纳在第二个的4个字节边界(一共8个字节)。...typedef int* INT_PTR; INT_PTR a, b; # define INT_PTR int*; INT_PTR a, b;  在这个宏定义中,a是一个指向整数的指针,而b是只有一个整数声明...静态声明一个函数的优点包括:   A)两个两个以上具有相同名称的静态函数,可用于在不同的文件。   B)编译消耗减少,因为没有外部符号处理。   ...9、避免悬空指针和野指针   一个指针的指向对象已被删除,那么就成了悬空指针。野指针是那些未初始化的指针,需要注意的是野指针不指向任何特定的内存位置。

26810

4.2 C++ Boost 内存池管理库

Boost库已被广泛应用于许多不同领域的C++应用程序开发中,网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...C++指针操作可以说是继承了C语言的优点,但同时也带来了一些问题,例如内存泄漏、悬挂指针、访问越界等。这些问题不仅会导致程序运行错误,还会对系统稳定性造成影响。...(new int); *int_ptr = 1024; cout << "指针: " << &int_ptr << " 数值: " << *int_ptr << endl; boost::shared_ptr...,在指针内部读者可通过使用ptr.use_count()来输出当前的计数器,当此处代码没有被使用是则引用计数器会为0,而当代码多个进程使用时则引用计数器相应的会增加,查询引用计数器可以如下所示;#include...它是一个轻量级的智能指针,相比于标准库中的shared_ptr,intrusive_ptr可以方便地在自定义数据结构中使用,因为它不需要在自定义类型中维护额外的引用计数器。

58540

4.2 C++ Boost 内存池管理库

Boost库已被广泛应用于许多不同领域的C++应用程序开发中,网络应用程序、图像处理、数值计算、多线程应用程序和文件系统处理等。...C++指针操作可以说是继承了C语言的优点,但同时也带来了一些问题,例如内存泄漏、悬挂指针、访问越界等。这些问题不仅会导致程序运行错误,还会对系统稳定性造成影响。...(new int); *int_ptr = 1024; cout << "指针: " << &int_ptr << " 数值: " << *int_ptr << endl; boost::...,在指针内部读者可通过使用ptr.use_count()来输出当前的计数器,当此处代码没有被使用是则引用计数器会为0,而当代码多个进程使用时则引用计数器相应的会增加,查询引用计数器可以如下所示; #include...它是一个轻量级的智能指针,相比于标准库中的shared_ptr,intrusive_ptr可以方便地在自定义数据结构中使用,因为它不需要在自定义类型中维护额外的引用计数器。

28520

第4章 | 移动

图 4-6:在 Python 中将 s 赋值给 t 和 u 的结果 Python 已经将指针从 s 复制到 t 和 u,并将此列表的引用计数更新为 3。...图 4-8:在 C++ 中将 s 赋值给 t 和 u 的结果 理论上,如果涉及某些特定的值,那么 C++ 中的赋值可能会消耗超乎想象的内存和处理器时间。...会将纯字符串字面量( "udon")放在只读内存中,因此为了与 C++ 示例和 Python 示例进行更清晰的比较,此处调用了 to_string 以获取堆上分配的 String 值。...将值传给函数 整个 Person 结构体(不是指向它的指针)被传给了向量的 push 方法,此方法会将该结构体移动到向量的末尾。...例如,本章的前半部分展示过在 C++ 中将一个变量赋值给另一个变量时可能需要任意数量的内存和处理器时间。Rust 的一个原则是:各种开销对程序员来说应该是显而易见的。

5510

Java最大的竞争对手是谁?

2) 剔除goto关键字 虽然在Java中将关键字goto保留了,但是Java不支持C、C++ 中的goto语句,而是通过异常处理语句try、Catch、final等来代替C、C++ 中用goto语句来处理遇到错误时跳转的情况...,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个CC++ 中的私有成员,从而破坏安全性,造成系统的崩溃。...再次释放已释放的内存块未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new为它们分配内存堆。...8) 类与结构体和联合体 安全是一个永恒的话题。C、C++ 中的结构体和联合体中的所有成员均为公有,这就带来了安全性问题。Java中不包含结构体和联合体,所有的内容都封装在类中。...本文自:http://book.51cto.com/art/200909/151643.htm

1.6K110

COM聚合技术中的QueryInterface

先说明一下,为了节省篇幅,对于一些约定俗成的代码和变量,下文不再进行说明,内部组件指向外部组件的m_pUnknownOuter和外部组件指向内部组件的m_pUnknownInner等,这些内容在相关书籍都有描述...原因何在?...书中特意强调“通过这一换,我们可以保证返回的是一个非委托的未知接口指针,当向委托接口指针查询IID_IUnknown时,他返回的将总是一个指向其自身的指针”。...答案就是C++类的虚函数表。 在C++的类中,如果使用了继承关系,类的结构中就会有一个虚函数表,读者可以自己测试一下,如果是一个没有任何内容的空类,其大小为1 Byte,这个是系统自动填充的内容。...外部组件CB创建CA时需要获取内部组件CA的IUnknown指针,创建过程中使用NondelegatingQueryInterface进行IUnknown的获取,该函数中将指向CA组件自己的指针强制转换成了非委托未知接口的指针

85120

c++类型转换与RTTI运行阶段类型识别

我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针...1、static_caststatic_cast仅当type_name可以被隐式转换为expression所属类型expression可隐式转换成type_name所属类型时,上述转换才是合法的。...static_cast是用得最多的一类类型转换符,常见的枚举值转成整形,float整形之类的,都是可以的。...另外,static_cast还可以将派生类指针换为基类指针,而且一定条件下还能将基类指针换为派生类指针,且不会报错,只是一些只有派生类才会有的函数、成员变量,转换过来的指针也不会有。...目前c++中有3个支持RTTI的元素:dynamic_cast,将一个指向基类的指针来生成一个指向派生类的指针,否则,该运算符将返回空指针typeid,返回一个指针对象类型的值type_info,结构存储了有关特定类型的信息

15200

static_cast ,reinterpret_cast

它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针引用的转换。...进行上行转换(把派生类的指针引用转换成基类表示)是安全的; 进行下行转换(把基类指针引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。...②用于基本数据类型之间的转换,把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ③把空指针转换成目标类型的空指针。 ④把任何类型的表达式转换成void类型。...2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较低层的重新解释”也就是说将数据以二进制存在形式的重新解释。...C++同时提供了4种新的强制类型转换形式(通常称为新风格的C++风格的强制 型):const_cast(expression)、dynamic_cast(expression)、 reinterpret_cast

1.9K100

整理了70道C语言与C++常见问答题

C++的有什么区别 C语言的结构体是不能有函数成员的,而C++的类可以有。...只能指针引用。向下转化时,如果是非法的***对于指针返回NULL,对于引用抛异常***。要深入了解内部转换的原理。...执行行运行时类型检查 只适用于指针引用 对不明确的指针的转换将失败(返回 nullptr),但不引发异常 可以在整个类层次结构中移动指针,包括向上转换、向下转换 「const_cast」 用于删除 const...、volatile 和 __unaligned 特性(将 const int 类型转换为 int 类型 ) reinterpret_cast 用于位的简单重新解释 滥用 reinterpret_cast...允许将任何指针换为任何其他指针类型( char* 到 int* One_class* 到 Unrelated_class* 之类的转换,但其本身并不安全) 也允许将任何整数类型转换为任何指针类型以及反向转换

3K01

CC++面试常问题集(1)

1、C和C++的区别 / 面向对象语言和面向过程语言的区别 C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得到输出,它的重点在于算法和数据结构 C++是面向对象的语言,首要考虑的是如何构造一个对象模型...,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出实现过程(事务)控制。...编译   编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:   第一个阶段是预处理阶段,在正式的编译阶段之前进行。...(1)宏定义指令, #define a b   (2)条件编译指令,#ifdef,#ifndef,#else,#elif,#endif等。    ...因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。

70240

《逆袭进大厂》第三弹之C++提高篇79问79答

指针和引用之间如何转换? 1) 向上类型转换 将派生类指针引用转换为基类的指针引用被称为向上类型转换,向上类型转换会自动进行,而且向上类型转换是安全的。...2) 向下类型转换 将基类指针引用转换为派生类指针引用被称为向下类型转换,向下类型转换不会自动进行,因为一个基类对应几个派生类,所以向下类型转换时不知道对应哪个派生类,所以在向下类型转换时必须加动态类型识别技术...141、如何在不使用额外空间的情况下,交换两个数?...使用引用参数的主要原因有两个: 程序员能修改调用函数中的数据对象 通过传递引用而不是整个数据–对象,可以提高程序的运行速度 2) 一般的原则: 对于使用引用的值而不做修改的函数: 如果数据对象很小,内置数据类型或者小型结构...1) 更加安全; 2) 更直接明显,能够一眼看出是什么类型转换为什么类型,容易找出程序中的错误;可清楚地辨别代码中每个显式的强制;可读性更好,能体现程序员的意图 176、成员函数里memset(this

2.2K30

开发者自述:我为什么从C语言投了D语言?

---- 作为开发人员,换开发语言其实是一件需要很高成本的事,本文主要讲讲我是怎么从C语言投D语言的。 其实我的经历和许多系统程序员的故事差不多。...如果你酷爱编程,这篇文章是一个很好的解读, 但我的解读是:C++成员函数指针应该是感觉像是一个低级功能(就像普通函数指针一样),但其实现的复杂性和多样性说明它们真的很“高级”。...static assert(kNumInducers<16); 系统代码通常对对齐结构大小其他事物做出假设。...D语言还利用结构析构函数支持RAII。 常量和不可变量 有一个流行的说法是,C和C++中的const对编译器优化很有用。...所有理智的用例都被替换为本机语言功能,清单常量和模板。这包括适当的模块支持,这意味着D可以摆脱旧#include黑客的限制。

1.4K20
领券