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

如何删除这段C++ 14代码中的老式C宏,保持效率和速度?

要删除C++ 14代码中的老式C宏,可以使用以下方法来保持效率和速度:

  1. 替换宏定义:将宏定义替换为常量或者内联函数。常量可以直接替换宏定义的地方,而内联函数可以提供类似宏的功能,并且具有类型安全性和更好的代码可读性。
  2. 使用constexpr:C++ 14引入了constexpr关键字,可以在编译时计算表达式的值。可以使用constexpr来替代宏定义中的常量表达式,以提供更好的类型检查和编译时计算。
  3. 使用模板:使用模板可以实现泛型编程,避免使用宏定义来处理不同类型的数据。通过使用模板,可以在编译时进行类型检查,并生成适用于不同类型的代码。
  4. 使用内联函数:将宏定义替换为内联函数可以提供类似宏的效果,并且具有类型安全性和更好的代码可读性。内联函数可以避免函数调用的开销,并且在编译时进行类型检查。
  5. 使用命名空间:将宏定义放入命名空间中,以避免全局命名冲突。通过将宏定义放入命名空间中,可以提供更好的代码组织和可维护性。
  6. 使用constexpr函数:C++ 14引入了constexpr函数,可以在编译时计算函数的返回值。可以使用constexpr函数来替代宏定义中的函数调用,以提供更好的类型检查和编译时计算。
  7. 使用STL容器和算法:使用标准模板库(STL)提供的容器和算法,可以避免使用宏定义来处理数据结构和算法。STL提供了丰富的容器和算法,可以提高代码的可读性和可维护性。
  8. 使用C++ 14特性:C++ 14引入了许多新特性,如变长模板参数、泛型lambda表达式等,可以替代宏定义中的一些复杂功能。通过使用这些新特性,可以提供更好的类型检查和代码可读性。

总结起来,要删除C++ 14代码中的老式C宏,可以使用替换宏定义、使用constexpr、使用模板、使用内联函数、使用命名空间、使用constexpr函数、使用STL容器和算法、使用C++ 14特性等方法来保持效率和速度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++头文件std命名空间

fstream.h:用于文件操作头文件。 complex.h:用于复数计算头文件。 C语言一样,C++ 头文件仍然以.h为后缀,它们所包含类、函数、等都是全局范围。...但是这时已经有很多用老式 C++ 开发程序了,它们代码并没有使用命名空间,直接修改原来库会带来一个很严重后果:程序员会因为不愿花费大量时间修改老式代码而极力反抗,拒绝使用新标准 C++ 代码...需要注意是,旧 C++ 头文件是官方所反对使用,已明确提出不再支持,但旧C头文件仍然可以使用,以保持C兼容性。...前面几节我们使用了C语言格式输出函数 printf,引入了C语言头文件 stdio.h,将C代码 C++ 代码混合在了一起,我不推荐这样做,请尽量使用 C++ 方式。...读者暂时不需要深入了解这段代码细节,只需要留意using namespace std;,它声明了命名空间 std,后续如果有未指定命名空间符号,那么默认使用 std,代码 string、cin、

46030
  • 机器人CPP编程基础-01第一个程序Hello World

    很多课程先讲C/C++或者一些其他编程课,称之为基础课程。然后到本科高年级进行机器人专业课学习,这样时间损失非常大,效率非常低。...https://www.lanqiao.cn/courses/854 适用于 C++ 11 14 17 20…… Arduino UNO DUE ESP8266 ESP32……  ARM…… ROS1...这是因为iostream文件函数对象都在std命名空间中。 接下来是main()函数,这是C++程序入口点。当你运行程序时,main函数就会被调用。...; return 0; } 注意:该代码在Arduino IDE可能无法直接运行。Arduino IDE主要用于微控制器编程,它与标准C++编译器有所不同。...ROS是一个用于编写机器人软件框架,它支持多种编程语言,包括C++、PythonJava等。 代码主要功能是发布一个包含字符串“hello world!”

    38630

    c++代码整洁之道

    整洁代码在团队无疑是很受欢迎,可以高效被其它成员理解维护,本文参考《C++代码整洁之道》《Google C++编码规范》,结合自己一些想法整理如下: C++本身作为面向对象语言,首先介绍下面向对象一般涉及到开发原则...保持简单直接原则(KISS, Keep it simple and stupid):保持代码尽可能简单,如果需求需要的话,才在代码引入灵活可变点,只添加那些可使整体变得更简单局部复杂东西。...单元测试原则 保证单元测试代码质量,单元测试代码也是代码,不应该产品代码区别对待,而且单元测试代码再写出bug更影响测试效率。...#define, 使用后要立即 #undef google文档说一定不要用来控制条件编译(但是我自己还没有查到不用如何控制条件编译,或许就不要搞条件编译) 尽可能用 sizeof(varname...C++stringstream替代C语言风格char*,使用std::ostreamstd::cout替代printf()、sprintf()等 尽量使用STL标准库容器而不是C语言风格数组

    1.1K10

    我用 Rust 改写了自己C++项目:这两个语言都很折磨人!

    C++ 多数函数方法都需要声明两次:一次在 header 里,一次在实现文件里。但 Rust 不需要,因此代码行数会更少。 C++ 完整构建时间比 Rust 长(Rust 更胜一筹)。...在我不断截代码过程C++ 测试一直保持了通过状态。 在彻底将 quick-lint-js 项目中涉及词法分析部分全截出来之后,项目中 C++ 代码大约有 1.7 万行。...主要影响 Rust C++ 构建时间问题在于,C++ 诊断系统是通过大量代码生成、、constexpr(常量表达式)实现,而我在重写 Rust 版时,则用了代码生成、proc 、普通以及一点点...传闻 proc 速度很慢,也有说是因为代码质量太差导致 proc 速度慢。希望我写 proc 还可以(祈祷~)。...那我自定义 Clang 加上 libstdc++ 在 C++ Rust 对比中表现如何呢? macOS:Xcode 是最快工具链。

    1.3K20

    有Bug? Rust 1.81.0新排序实现真能帮程序员避坑?

    这会不会导致C++臭名昭著菱形继承问题? ❓多个traitsubtraitsupertrait关系如果出现了菱形,会不会导致菱形继承问题 多重继承在C++可能会导致以下问题。...图2 C++菱形继承问题 在图2,D类会继承A类两个副本,一个通过B,另一个通过C。这可能导致歧义因继承导致数据冗余。 名称冲突。...这些问题危害包括代码复杂性增加、潜在运行时开销、可能逻辑错误,以及可维护性降低。 在Rust,不存在C++那样类,但有能起到相似作用且更加灵活trait。...Ord是EqPartialOrdsubtrait,定义完全顺序关系。 在Rust,这种继承关系由于以下原因,不会导致C++多重继承典型问题。 没有菱形继承问题。...[1, 2, 3]; // 使用创建并初始化 可以像下面那样用栈方式添加删除向量元素。当然也可以用其他非栈方式,但通常速度较慢。

    47673

    autocad二次开发资料总结

    C写就ADS程序,可在所有支持AutoCAD平台上进行源代码移植。只需使用普通C语言编译器就可以编译生成ADS模块,与ADS库标准C库链接后生成可执行文件,装入AutoCAD后即可运行。...因此那些频繁与AutoCAD通讯应用程序在ARX环境下运行效率明显优于老式ADS或AutoLISP环境。...ARX最早是在AutoCAD R13提供,但在AutoCAD R14,ARX就被ObjectARX所代替。...若用户有较好C++基础AutoLISP函数基础,同时又要开发速度性能要求都很高应用程序或大型CAD应用软件,则要使用ObjectARX。...也许经验老道C++或.net 程序员会问,我C++挺好,为什么要用JavaScript?大家知道JavaScriptWeb开发有着天然联系。

    3K32

    Python面试必刷题系列(3)

    说说Python3 Python2 之间区别? import方式:Py3是以绝对路径方式进行import,Py2则是相对路径方式。 新老式类:Python类为多继承方式。...简述解释型编译型编程语言 【编译型语言】 把源程序全部编译成二进制代码形式可直接执行程序。 特点:执行速度快、效率高、占内存少;跨平台性差、程序难于调试。...例子:CC++ 【解释型语言】 不需要预先编译,源程序由解释器解释一句执行一句,直到结束。...特点:执行速度慢、效率低、占内存高(因为运行时需要启动解释器);便于调试、跨平台性好(有相应解释器就行)。...当我们修改元组内容时,发现其内存地址不会变。 14. 如何打乱一个list元素?

    57820

    C语言 | C++常见面试题

    5sizeofstrlen区别 6 C 语言关键字static C++ 关键字static有什么区别 7 C 语言malloc C++ new有什么区别 8 写一个 “标准”MIN...语言结构体 C++ 有什么区别 26 简述指针常量与常量指针区别 27 如何避免“野指针” 28 句柄指针区别联系是什么?...35 面向对象三大特征 36 说一说 c++ 四种cast转换 37 C++ 空类有哪些成员函数 38 对 c++ smart pointer四个智能指针:shared_ptr,unique_ptr...59 为何mapset插入删除效率比其他序列容器高 60 为何mapset每次Insert之后,以前保存iterator不会失效?...62 map 、set、multiset、multimap特点 63 为何mapset插入删除效率比其他序列容器高,而且每次insert 之后,以前保存iter 64 为何mapset不能像vector

    1.2K98

    C语言与C++常见面试题

    C 语言 malloc C++ new有什么区别 8 写一个 “标准”MIN 9 ++i i++区别 10 volatile有什么作用 11 一个参数可以既是 const又是 volatile...吗 12 a &a有什么区别 13 用 C 编写一个死循环程序 14 结构体内存对齐问题 15 全局变量和局部变量有什么区别?...C 语言结构体 C++ 有什么区别 26 简述指针常量与常量指针区别 27 如何避免“野指针” 28 句柄指针区别联系是什么?...、multimap底层原理 59 为何 map set插入删除效率比其他序列容器高 60 为何 map set每次 Insert之后,以前保存 iterator不会失效?...62 map 、set、multiset、multimap特点 63 为何 map set插入删除效率比其他序列容器高,而且每次 insert 之后,以前保存 iter 64 为何 map set

    1.4K10

    C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案

    子类继承父类大部分资源,不能继承有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等 14C++什么是多态性? 是如何实现?...正确答案: C是使用#define定义, C++使用更好const来定义。...C++提供了C连接交换指定符号extern"C"来解决名字匹配问题。 14如何让局部变量具有全局生命期。...正确答案: (最好这个项目继承,多态,虚函数都有体现)这个问题大概会占面试时间一半,并且会问很多问题,一不小心可能会被问住) 14CC++各自是如何定义常量?有什么不同?...正确答案: C是使用#define定义,C++使用更好const来定义。

    2.4K20

    C语言与C++常见面试题

    if语句 4 结构体可以直接赋值吗 5sizeofstrlen区别 6 C 语言关键字static C++ 关键字static有什么区别 7 C 语言malloc C++ new有什么区别...语言结构体 C++ 有什么区别 26 简述指针常量与常量指针区别 27 如何避免“野指针” 28 句柄指针区别联系是什么?...35 面向对象三大特征 36 说一说 c++ 四种cast转换 37 C++ 空类有哪些成员函数 38 对 c++ smart pointer四个智能指针:shared_ptr,unique_ptr...59 为何mapset插入删除效率比其他序列容器高 60 为何mapset每次Insert之后,以前保存iterator不会失效?...62 map 、set、multiset、multimap特点 63 为何mapset插入删除效率比其他序列容器高,而且每次insert 之后,以前保存iter 64 为何mapset不能像vector

    82110

    写给新手们看编程修养

    07、头文件#ifndef 08、在堆上分配内存 09、变量初始化 10、hc文件使用 11、出错信息处理 12、常用函数循环语句中被计算量 13、函数名变量名命名 14、函数传值传指针...14、函数传值传指针 向函数传参数时,一般而言,传入非const指针时,就表示,在函数要修改这个指针把指内存数据。...以“注释 — 添加”方式修改别人程序,要好于直接删除别人程序。 16、把相同或近乎相同代码形成函数 有人说,最好程序员,就是最喜欢“偷懒”程序,其中不无道理。...如果你有一些程序代码片段很相似,或直接就是一样,请把他们放在一个函数。而如果这段代码不多,而且会被经常使用,你还想避免函数调用开销,那么就把他写成吧。...C++对const定义就很严格了,所以C++要多多使用const,const成员函数,const变量,这样会对让你代码和你程序更加完整和易读。

    1.5K30

    c++之数据处理笔记(一)

    1.变量名 c++命名规则: 在名称只能使用字母字符、数字下划线 名称第一个字符不能是数字 区分大写字符小写字符 不能将c++关键字作为名称 以两个下划线或下划线大写字母打头名称保留给实现(...c++对名称长度没有限制,名称所有字符都有意义,但有些平台有长度限制 2.典型整型溢出行为 C++中常用数据类型有整形,字符型,浮点型(单精度双精度)等等。...,继续+1为32768. 3.整型字面值 整型字面值(常量)是显式书写常量 C相同,C++能够以三种不同计数方式来书写整数,基数为10,基数为8(老式UNIX版本),基数为16(硬件黑客最爱)...C++表示法: C++使用前一位(两)来标识数字常量基数。如果第一位为1-9,则基数为10,因此93是以10为基数。...4).其他 在编译时, 编译器通常不为const常量分配存储空间,而是将它们保存在符号表,这使得它成为一个编译期间常量,没有了存储与读内存操作,使得它效率也很高。

    51320

    一起长锈:3 类型安全Rust(从Java与C++转Rust之旅)

    3.3.1 替换代码文本C++ 席双嘉:“C++与Rust不一样。它是由预处理器用来处理C++在编译前就把代码文本进行简单替换了。...“ "C++其实根本不理解代码含义,只是按照给定模式替换文本而已。" ",一般都是在头文件定义,用 #define 指令就行了。“ "C++,其实还是有点用,主要有两点。”...C++语言早期一部分,老代码库中都有用到,这样就可以保证历史代码兼容性了。” "但是,C++也有不好地方。” "首先,它不安全。...C++与Rust不一样,C++在编译前就把代码文本进行简单替换了。...在安全性上,Rust在编译时执行,保持类型安全;C++可能会带来类型错误;Java注解自己不会引入执行逻辑,但是注解处理器可能会变得复杂。

    18432

    cc++常见面试题

    CC++各自是如何定义常量?有什么不同? C是使用#define定义, C++使用更好const来定义。...2)有些编译器可以对const常量进行调试, 不能对调试。 4. 既然C++中有更好const为什么还要使用? const无法代替作为卫哨来防止文件重复包含。 5....C++引用指针区别?...C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。 10. C++什么是多态性? 是如何实现? 多态性是面向对象程序设计语言继数据抽象继承之后第三个基本特征。...反之, 如果程序功能是在运行时刻才能确定下来, 则称之为动态特性。C++, 虚函数,抽象基类, 动态绑定多态构成了出色动态特性。 12.什么是封装?C++如何实现

    61230

    CC++编码规范

    C++高级进阶教程》就编码规范作了如下叙述。 1.编码规范作用 对于变成人员,良好编程风格是提高程序可靠性效率非常重要手段。而编码规范就是对编程风格最好约束保障。...严格遵守编码规范方便代码交流维护,利于提高代码简洁性,稳定性效率。 2.可供参考C++编码规范 C++额编码规范设计到程序设计方方面面,而不是三言两语就可以描述清楚。...返回对象(值)优化 前缀++效率更高 恰当使用递归 恰当地使用inline 函数 虚函数虚继承效率会有一点损失 如果合理...不要将基类强制转换成派生类 关于C++分支用法选择 慎用多重继承 所有多重继承基类析构函数都应是虚函数 2.9内存分配释放 用new、delete...C/C++代码有很多注意点,远远不是上面这些规则所能完全囊括

    2K20

    Linux:开发工具(2)

    无论是在windows、还是LinuxC++开发环境不仅仅指的是vs、gcc、g++,更重要是语言本身头文件(函数声明)库文件(函数实现)。...所以任何一款编译型语言使用,都必要需要安装相应开发包(头文件库文件) 查看头文件:ls /usr/include/ 1.2 预处理(进行替换) 预处理阶段会涉及到很多操作 a、去注释 注释我们一般用于对我们代码进行解释说明...,在必要时候启动这段代码或者是去掉这段代码。...1.6 .o库是如何链接(静态链接动态链接) 1.6.1 动态库文件和静态库文件 在Linux: .so(动态库)  .a(静态库) 命名规则:libname.so.XXX 在windows...总结:只需要比较可执行程序时间源文件最近修改时间即可! .exe比.c老,说明被修改过,需要重新编译 .exe比.c新,说明没有被修改过,就不需要重新编译(提高了编译效率!)

    11710

    C语言】预处理&&编译链接&&调试技巧详解

    但是对于,不能出现递归 当预处理器搜索#define定义符号时候,字符串常量内容并不被搜索 1.2.4 ### 1.2.4.1 # 作用 如何把参数插入到字符串?...原因有二: 用于调用函数从函数返回代码可能实际执行这个小型计算工作所需要时间更多 所以比函数在程序规模速度方面更胜一筹 更为重要是函数参数必须声明为特定类型 所以函数只能在类型合适表达式上使用...,那么就使用函数实现 1.2.7 内联函数 C99之后,C++引入了内联函数概念 inline关键字 内联函数具有函数双重优点: 内联函数是函数 内联函数又像一样,在调用地方展开 1.2.8...c文件,如何在一个.c文件调用另一个.c文件函数呢 这里我们了解一个概念叫做符号汇总 假设有这样代码 进行符号汇总 注意:符号汇总只能汇总全局变量 2.3.1.3 汇编 把汇编代码翻译成了二进制指令...以后可能会出现很复杂调试场景:多线程程序调试等 多多使用快捷键,提升效率 3.6 如何写出好(易于调试)代码 代码运行正常 bug很少 效率高 可读性高 可维护性高 注释清晰 文档齐全 3.6.1

    27510

    Android C++ 系列:NDK 减少 so 库体积方法总结

    ◆ 使用 strip 使用 NDK toolchain 可以把调试 C++ 符号表(Symbol Table)数据删除,我们一般我们打成 APK 会自动帮我们做这个工作,当然也可以手动设置: 手动在链接选项中加入...◆ 去除 C++代码 iostream 等直接 IO 相关代码 使用 STL iostream 相关库会明显增加包体积,而 Android 本身是有预编译库(android/log.h)可以代替输入到控制台工具...◆ STL 使用方式 对于 C++ library,引用方式有 2 种: 静态方式(static) 动态方式(shared) 其中,静态方式在编译时会将用到相关代码直接复制到目的文件;而动态方式则会将相关代码打成...Exception 使用 C++ exception 会增加包大小,而目前 JNI 对 C++ exception 支持是有 bug ,比如下面这段代码就会引起程序 crash(对于低版本...相关推荐 推荐文章 Docker看完即掌握 [开源]多应用、多租户、多终端SaaS平台开发框架,SaaS服务平台 如何在断开连接后保持远程 SSH 会话运行 还在用维恩图可视化SQLJoin

    1.7K30
    领券