检查对象是否声明为 const

2024-03-02

如果对象被声明为 const,我想中断编译。

以下不起作用:

#include <type_traits>

struct A {

    A() : v(0)
    {
        static_assert( ! std::is_const<decltype(*this)>::value, "declared as const" );
    }

    int& AccessValue() const
    {
        return const_cast< int& >( v );
    }

    int v;
};

int main()
{
    A a1; // ok, this compiles
    const A a2; // no, this break the compilation

    a1.AccessValue() = 5; // ok
    a2.AccessValue() = 6; // OPS
}

那么,如果这种类型的对象被声明为 const,有没有办法打破编译呢?


你走错方向了。

的类型this纯粹由您使用它的方法的签名决定。那是,this总是类型cv T* const where cv对应于方法的 CV 限定符。

因此,在构造函数中,this只是T* const.


const_cast是一种代码味道,通常仅在处理时使用const-损坏的遗留库...或者(有时)以避免违反 DRY。在新代码中,您不必使用它。

你有一个选择:

  • make AccessValue非常量,因为它不是
  • declare i作为存在mutable.

我建议选择前一种解决方案。放弃一个句柄private属性已经不好了(破坏了封装),不需要违反const正确性也是如此。

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

检查对象是否声明为 const 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Qt moc 在头文件中实现?

    是否可以告诉 Qt MOC 我想声明该类并在单个文件中实现它 而不是将它们拆分为 h 和 cpp 文件 如果要在 cpp 文件中声明并实现 QObject 子类 则必须手动包含 moc 文件 例如 文件main cpp struct Sub
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 如何更改 OAuth2RestTemplate 中 MappingJacksonHttpMessageConverter 的 MediaType

    我有一个应用程序 它使用 Spring Source OAuth2 作为客户端从资源服务器检索用户数据并创建本地用户 当 OAuth2ClientContextFilter 尝试检索令牌时 我不断收到错误 org springframewo
  • Gnuplot 绘制两个 CSV 文件的排序合并

    我正在尝试合并和排序两个 CSV 文件 跳过前 8 行 我尝试按我使用的第 36 列对其中一个文件进行排序 awk NR gt 8 print Hight 5x5 csv sort nk36 并合并两个文件 cat Hight 5x5 cs
  • 如何让PHP自动为每个用户创建子域?

    如何创建子域http user mywebsite example 我必须访问吗 htaccess不知何故 实际上是否可以通过纯 PHP 代码创建它 或者我需要使用一些外部脚本服务器端语言 对于那些回答的人 那么 我应该询问我的托管服务是否
  • 转换为值类型“Double”失败,因为具体化值为 null

    CODE double cafeSales db InvoiceLines Where x gt x UserId user UserId x DateCharged gt dateStart x DateCharged lt dateEn
  • 如何在 Java 中抛出一般异常?

    考虑这个简单的程序 该程序有两个文件 File 车辆 java class Vehicle private int speed 0 private int maxSpeed 100 public int getSpeed return sp
  • 将 div 浮动在右下角,但不在页脚内

    我正在尝试实现一个浮动在页面右下角的 转到顶部 按钮 我可以使用以下代码来完成此操作 但我不希望此按钮进入我的页面的页脚 当用户将页面向下滚动到页面底部时 如何阻止它进入页脚并停留在页脚顶部 CSS to top position fixe
  • C++ - 区间树实现

    有人知道有什么好办法吗interval tree在C 中实现 显然 模板驱动的东西更好boost 风格 还有一个问题 如果有人测试过 会做一个基本的测试std vector基于排序的区间树实现可以击败通用区间树 O lg 运算 在实践中 我
  • JQuery:在“内存”而不是 DOM 中构建 HTML

    有没有办法在将 HTML 片段添加到 DOM 之前 预先构建 它 例如 mysnippet append h1 hello h1 mysnippet append h1 world h1 destination append mysnipp
  • JavaScript 函数声明

    下面给出的 JavaScript 代码片段是某种函数声明吗 如果没有 有人可以概述一下它们是什么吗 some func function value some code here and show function value some c
  • 如何复制视图的所有属性?

    我正在创建一个货币汇率应用程序来学习 Android 该应用程序将在列表中列出所有汇率 每个汇率都有这样的布局 本质上
  • 指针到指针到指针[重复]

    这个问题在这里已经有答案了 可能的重复 用于多级指针取消引用 https stackoverflow com questions 758673 uses for multiple levels of pointer dereferences
  • React Native - 如何在地图函数中传递索引

    我有一个地图函数来重复动态地创建组件 假设是这样的 renderBoxes return Array map data gt this myFunction indexOfThisArray 如何传递数组的索引 这样 myFunction
  • 将视图从一种布局动画化到另一种布局

    检查附图以方便解释 翻译动画可以工作 但它会在同一视图内进行动画处理 我希望视图从一种布局飞出到另一种布局 我从这里的另一个答案尝试过这个 相同布局的动画 public class Animations public Animation f
  • 无法在 PHP 中创建不区分大小写的正则表达式

    我无法在 php 中创建有效的正则表达式 我在用着i标记为正则表达式模式 但它不会对我的脚本的结果产生影响 page Test page1 test var dump preg match test i page int 0 var dum
  • 为引用的程序集引发 FileNotFoundException

    我真的很奇怪FileNotFoundException第一次尝试使用我引用的程序集中定义的类时抛出 程序集没有更改 项目文件中的位置与磁盘上的物理路径正确对应 当我将安装程序添加到 Windows 服务和安装项目时 由两个库项目 一个 Wi
  • iOS8后台获取问题

    我在 ios8 之前使用后台获取没有问题 但在 ios8 中 当我在手机上模拟后台获取时 我首先收到一条错误消息 指出我无权播放声音 因此我没有收到任何本地通知 然后打开应用程序后 应用程序崩溃 我收到这个奇怪的错误 由于未捕获的异常而终止
  • fetch.max.wait.ms 与 poll() 方法的参数

    在提出问题之前 我想指出已经有人提出了类似的问题here https stackoverflow com questions 50302119 apache kafka understanding the relationship betw
  • 是否可以在groovy函数上设置环境变量

    我知道我可以在一个阶段有一个关于詹金斯管道 声明性 的环境部分 像这样 stage Name environment NAME value steps script Do something using these env vars 我想编
  • 删除条件格式

    我正在尝试使用 C 和以下代码添加条件格式 Microsoft Office Interop Excel FormatCondition formatConditionObj null formatConditionObj Microsof
  • 检查对象是否声明为 const

    如果对象被声明为 const 我想中断编译 以下不起作用 include