问题标签 [const-cast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
50199 浏览

c++ - const_cast 安全吗?

我找不到太多关于const_cast. 我能找到的唯一信息(在 Stack Overflow 上)是:

const_cast<>()用于添加/删除变量的 const(ness)(或 volatile-ness)。

这让我很紧张。可以使用const_cast导致意外行为吗?如果是这样,是什么?

或者,什么时候可以使用const_cast

0 投票
4 回答
11233 浏览

c++ - C++ const_cast 使用而不是 C 风格的强制转换

为什么会出现以下情况?:

0 投票
4 回答
408 浏览

c++ - const_cast 是否会导致实际的代码发射?

const_cast是否只是告诉编译器“停止抱怨,将其视为非常量指针”的一种方式?是否存在将const_cast本身翻译成实际机器代码的情况?

0 投票
5 回答
2258 浏览

c++ - 为什么我不能 const_cast 转换运算符的返回?

我有一个返回 const 指针的转换运算符,我需要 const_cast 它。但是,这不起作用,至少在 MSVC8 下是这样。以下代码重现了我的问题:

这是为什么?这似乎违反直觉。谢谢!

0 投票
5 回答
8119 浏览

c++ - 模板中的 const_cast。有一个非常量修饰符吗?

我有一个这样的模板类:

有时,我想使用具有常量类型 T 的类,如下所示:

但我想修改数据使用const_cast<MyObject*>data(这并不重要,但它MyClass是一个引用计数智能指针类,它将引用计数保留在数据本身中。MyObject派生自包含计数的某种类型。数据不应该被修改,但是count 必须由智能指针修改。)。

有没有办法从 const-ness 中删除T?虚构代码:

?

0 投票
5 回答
1286 浏览

c++ - 是否允许使用 const_cast 对 const 对象进行只读访问?

在 C++ 中,我有一个只需要对数组进行只读访问但被错误地声明为接收非常量指针的函数:

我需要为 const 数组调用它:

这将是未定义的行为吗?如果是这样 - 程序何时会运行到 UB - 当执行 const_cast 并调用函数或访问数组时?

0 投票
5 回答
1028 浏览

c++ - 需要 C 风格、重新解释和 const 类型转换的说明

我是否正确假设 C 风格的演员表(不鼓励)只不过是 reinterpret_casts ?在寻找讨厌的演员表时,使用后者在视觉上很引人注目并且易于搜索,因此建议使用 C 风格的演员表?

如果使用 const_cast 丢弃 const 并写入最初的 const 对象是未定义的,那么 const_cast 的目的是什么?

注意:我知道 Bjarne 正确地谴责铸造操作是不安全的,甚至到了“丑陋的操作应该有丑陋的句法形式”的程度。因此在 C++ 中强制转换运算符的冗长。所以我会尽量减少它们的使用。承诺。:)

0 投票
8 回答
18645 浏览

c++ - const_cast<> 的正确用法

通常,const_cast<>()在 C++ 代码中使用它通常被认为是一种不好的做法,因为它(大多数时候)揭示了设计中的缺陷。

虽然我完全同意这一点,但我想知道使用const_cast<>()的是什么情况是可以的,并且是唯一的解决方案

你们能给我一些你知道/遇到的例子吗?

非常感谢你。

0 投票
3 回答
615 浏览

c++ - 复制构造函数中 const_cast 的含义?

所以我有一个输出流类,它拥有一个指向实际执行写入的类的指针,我需要一个复制构造函数,以便我可以从函数返回初始化的实例,以便我可以透明地将某些值绑定给用户。为了获得合理的复制语义,我真的很想清除复制对象中的写入器指针并关闭它,使其在复制期间无法使用。

我可以使用非常量复制构造函数 a-la 来做到这一点:

但我希望能够直接从函数调用返回的临时分配:

复制构造函数必须是 const。所以我很好奇在复制构造函数中使用 const_cast 会有什么影响。我将另一个引用转换为非常量指针并清除我提到的编写器指针。我知道 const_cast 通常被认为是邪恶的,但在这种情况下它可以工作吗?我特别好奇它将如何与从函数调用返回的临时对象进行交互。

或者,只有四个创建函数我真的想访问复制构造函数,如果有一种合理的方法来确定它的范围,以便它只能用于这些函数(包括它们的返回值),那么我更喜欢那个。

0 投票
5 回答
700 浏览

c++ - 定义数组时可以接受 const_cast 吗?

我有一个静态 const 数组类成员(指向 SDL_Surfaces 的 const 指针,但这无关紧要),并且必须遍历它才能填充它。除了当我完成循环时的 const_cast (我听说这是不好的做法)之外,我将如何去做呢?

编辑:我不只是这样做的原因......

是我需要从不同的数组中读取并在不同数组的各自值上运行一个函数,以便获取该数组的值。一旦我一直循环,我就再也不会改变这个数组了,所以我看到它的方式应该是 const。

编辑2:我想我可能在这里犯了一个概念上的错误。是否有可能以某种方式进行 const_cast 来制作 const,而不是删除它的 constness,这就是我想要做的?如果不是,那我问这个有点傻:D