常量正确性可以提高性能吗?

2024-01-01

我已经多次读到,在 C 或 C++ 代码中强制 const 正确性不仅是可维护性方面的良好实践,而且还可以允许编译器执行优化。然而,我也读到了完全相反的内容——它根本不会影响性能。

因此,您是否有示例表明 const 正确性可以帮助您的编译器提高程序的性能?


const正确性不能提高性能,因为const_cast and mutable存在于语言中,并允许代码一致地违反规则。这在 C++11 中变得更糟,你的const数据可能例如是一个指向 a 的指针std::atomic,这意味着编译器必须尊重其他线程所做的更改。

也就是说,编译器查看它生成的代码并确定它是否实际写入给定变量并相应地应用优化是很简单的。

这一切都说,const正确性是一个good关于可维护性的事情。否则,您的类的客户可能会破坏该类的内部成员。例如,考虑标准std::string::c_str()-- 如果它不能返回 const 值,您就可以修改字符串的内部缓冲区!

不要使用const出于性能原因。使用它是出于可维护性的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常量正确性可以提高性能吗? 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • Scala 中的地图内的地图

    我有这个代码 val total ListMap String HashMap Int val hm1 new HashMap Int String val hm2 new HashMap Int Int insert values in
  • 在 R 中查找矩阵的相邻元素

    编辑 非常感谢以下用户的巨大贡献以及 Gregor 的基准测试 假设我有一个充满整数值的矩阵 如下所示 mat lt matrix 1 100 10 10 我可以像这样创建每个元素的 x y 坐标列表 addresses lt expand
  • Flutter如何访问FCM backgroundHandler静态方法中的provider.of(context)?

    我已成功设置后台通知并使用邮递员对其进行了测试 一切都很好 现在我需要在我的backgroundHandler 中访问Provider of context 它必须是没有上下文的静态方法 我需要做的就是根据后台通知中的数据执行操作 这是我初
  • 在 Ubuntu 上通过 Python 使用 Access 数据库 (.mdb) [重复]

    这个问题在这里已经有答案了 我正在尝试使用 pyodbc 访问 Ubuntu 上的 mdb 到目前为止我的进展基于此链接 查询使 MS Access 崩溃 https stackoverflow com questions 3064830
  • 在 Ionic 应用程序中全屏横向播放视频

    我在播放视频横向全屏模式时遇到问题 请帮助我以横向全屏模式显示视频 我使用以下代码在 Ionic 中查看模板
  • 绘制 Matplotlib 等高线图的轴线或原点

    我想画画x 0 and y 0等高线图中的轴 使用白色 如果这太麻烦了 我想要一个白点来表示原点在哪里 我的等高线图如下所示 下面给出了创建它的代码 xvec linspace 5 5 100 X Y meshgrid xvec xvec
  • 如何使用 OCMock 验证某个方法从未被调用?

    在我的日常工作中 我被宠坏了莫基托的never 确认 http mockito googlecode com svn tags latest javadoc org mockito Mockito html never 这可以确认模拟方法从
  • NSArray:lastObject 返回一个自动释放的对象吗?

    我正在开发一个 iPhone 项目 我想从 NSMutableArray 中检索一个对象 从数组中删除该对象 然后在以后使用它 代码看起来像这样 NSMutableArray array fill the array NSObject ob
  • 使用 STL 在 C++ 中处理大于 2 GB 的文件

    我正在进行二进制文件处理 在我的算法中我想知道实际类型pos type and off type 例如计算文件大小或查找给定位置时 tellg and seekg 当计算文件的大小时我只是static cast the pos type t
  • 根据构建配置嵌入不同的框架

    我有 4 种构建配置 Debug Release 白标调试 白标发布 Debug and Release应该链接并嵌入我的自定义LightTheme framework而不是WhiteLabelTheme framework WhiteLa
  • 在批处理脚本中查询注册表项

    我使用以下代码来获取启动时运行的程序列表 并将它们记录到文件中 for f skip 2 tokens 1 2 A in REG QUERY HKCU SOFTWARE Wow6432Node Microsoft Windows Curre
  • 未记录的支持 Date.parse 格式?

    MDN s 的文档Date parse https developer mozilla org en JavaScript Reference Global Objects Date parse says 参数 dateString一个字符
  • 如何同时在2个不同的symfony2防火墙上进行身份验证?

    我有一个包含 2 个区域的 Symfony 应用程序 一个区域用于客户端从网页访问 另一个区域用于来自 AJAX 和 Web 服务的 API 调用 每个区域都由自己的防火墙保护 WEB 界面通过登录表单和 API 进行身份验证http ba
  • 如何在视图集中添加自定义权限

    创建模块时 如何在 django Rest Framework 的视图集中添加除默认权限之外的自定义权限 我有权限 fix an appointment 在下面的视图集中 如何包含此权限 拥有此权限的人只能进行创作 我的views py文件
  • 使用 Python 请求提取 href URL

    我想使用 python 中的 requests 包从 xpath 中提取 URL 我可以获取文本 但我尝试没有给出 URL 有人可以帮忙吗 ipdb gt webpage xpath xpath url text Text of the U
  • 在 tkinter 中显示网格布局单元

    有没有trick使用它时显示网格布局单元格 或单元格的边框 以便直观地了解幕后发生的情况 我已经搜索了一点 但还没有找到任何东西 如果您为包含框架指定颜色 并使用选项在单元格之间放置填充 则背景将通过间隙渗透 这只适用于有小部件的地方 如果
  • Ktor 中的表单身份验证

    我是新来的Kotlin and Ktor试图查看身份验证部分 所以我得到了以下代码 路由 和 bye 工作正常 但路由 login 给出空白页面 package blog import kotlinx html import kotlinx
  • Opencv 矩阵元素的列和

    我需要分别计算所有列中元素的总和 现在我正在使用 矩阵 cross corr 应该被求和 Mat cross corr summed for int i 0 i
  • /vagrant挂载后如何运行nginx.service

    我想做的事 我正在尝试使 nginx 加载配置 vagrant由vagrant自动安装 所以我编辑了 nginx service 使其在安装共享文件夹后启动 但它不起作用 当然nginx是在virtualbox guest utils se
  • 常量正确性可以提高性能吗?

    我已经多次读到 在 C 或 C 代码中强制 const 正确性不仅是可维护性方面的良好实践 而且还可以允许编译器执行优化 然而 我也读到了完全相反的内容 它根本不会影响性能 因此 您是否有示例表明 const 正确性可以帮助您的编译器提高程