问题标签 [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 投票
2 回答
404 浏览

c++ - const_cast:相同的地址但不同的值?

刚接触 C++ 并学习 const_cast — 被下面的代码弄糊涂了:

输出是

谁能告诉我为什么地址(&i 和 p,或 &j 和 q)相同,但值(i 和 *p,或 j 和 *q)不同?我正在使用 Visual Studio 2013RC。

0 投票
2 回答
3177 浏览

c++ - 使用 const_cast 添加 const-ness - 坏主意?

众所周知,应该避免使用 const_cast 来删除指针的 const-ness。

但反过来又如何呢?

对于我的用例,我有一个从非常量源缓冲区复制数据(字节)的函数。我认为一个好的设计决策是根据该源缓冲区完全 const 声明参数。

对于像下面这样的函数调用,这将导致指针类型错误“const char* const <-> char*”。

当然,现在我可以简单地将其声明sourcebuffer为 const,但在我的情况下,我无法访问该变量,因为它来自不同的代码位置(外部库)。

然而,超出的代码可以工作,但它是好的风格(根据我的用例)吗?

我认为声明copyfunctionas const 的参数可以确保用户不会修改(只读)指针或源缓冲区本身的位置。因此,在这种情况下, const_cast 只是启用函数调用而不是故意删除指针的 const-ness 所必需的邪恶......

问候

0 投票
2 回答
1011 浏览

c++ - 使用 const_cast 将 const 数据参数传递给参数为非常量的函数

我们可以使用 const_cast 将 const 数据参数传递给参数为非常量的函数。

但是,我们也可以通过以下方式实现铸造,

输出:20

那么,在这个特定场景中使用 const_cast 有什么需要呢?仅在这种特定情况下使用 const_cast 有什么好处吗?

0 投票
2 回答
1311 浏览

c++ - const_cast 一个右值到 const ref

我觉得奇怪的是 const_cast 不允许将右值(例如临时变量)转换为 const 限定引用,尽管它与 static_cast 一起工作得很好。有没有人解释它为什么会这样?

请不要陷入“const_cast 是邪恶的”论点,我在这里要做的是正确理解 C++ 标准中处理 const_cast 和 rvalues 的部分。

0 投票
1 回答
4288 浏览

c++ - 什么是多级指针?

在阅读有关内容时,const_cast我遇到了以下句子:

const_cast 只能进行以下转换。特别是,只有 const_cast 可以用来抛弃(删除)常量或波动性。

1) 两个可能指向同一类型的多级指针可以相互转换,而不管每一级的 cv 限定符。

我已经用谷歌搜索了一下,还没有找到任何关于多级指针是什么的简洁、直接的定义。那么:究竟什么是多级指针?

(可能的手掌时刻)它只是一个指向指针的指针,或指向指针的指针,例如int **int ***

0 投票
1 回答
161 浏览

c++ - 在成员例程中使用 const_cast 可以避免重复代码吗

在这种情况下可以使用 const_cast 还是有任何警告:

其目的是 get 例程可能要复杂得多,并且应避免代码重复。

0 投票
4 回答
150 浏览

c++ - const_cast 的奇怪行为

考虑以下代码:

我声明了一个新的引用端,通过 const_cast 将它分配给值 a。然后我只是增加参考值打印地址和值。

我怎样才能在同一个地址中有2个不同的值?

0 投票
1 回答
71 浏览

c++ - 一个变量中的 2 个值(const 和 const_cast)c++

是什么让类型转换影响了这一点?值存储在哪里?

0 投票
2 回答
8693 浏览

c++ - 不能对 const 对象使用 dynamic_cast

我想编写一个方法,其中Base对象指针将作为参数传递,并在方法内部将其转换为派生对象指针。

但它显示错误,因为动态转换不能丢弃 const specifier。但我不明白为什么const必须在这里删除说明符,我所做的只是创建一个派生指针,它应该指向指针之后的某个偏移量。我也试过const Derived* const der = dynamic_cast<Derived*>(obj);,但没有结果。

将参数作为 传递是很重要的const。我怎样才能做到这一点?我必须以丑陋的方式先申请const_castdynamic_cast?有没有更好的方法?

0 投票
0 回答
66 浏览

c++ - const_cast - 删除简单整数的常量。相同的内存位置具有不同的值

我正在使用 const_cast 来删除整数的常量。

输出:

谁能解释一下相同的内存位置如何保存不同的值?