问题标签 [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.
c++ - const_cast:相同的地址但不同的值?
刚接触 C++ 并学习 const_cast — 被下面的代码弄糊涂了:
输出是
谁能告诉我为什么地址(&i 和 p,或 &j 和 q)相同,但值(i 和 *p,或 j 和 *q)不同?我正在使用 Visual Studio 2013RC。
c++ - 使用 const_cast 添加 const-ness - 坏主意?
众所周知,应该避免使用 const_cast 来删除指针的 const-ness。
但反过来又如何呢?
对于我的用例,我有一个从非常量源缓冲区复制数据(字节)的函数。我认为一个好的设计决策是根据该源缓冲区完全 const 声明参数。
对于像下面这样的函数调用,这将导致指针类型错误“const char* const <-> char*”。
当然,现在我可以简单地将其声明sourcebuffer
为 const,但在我的情况下,我无法访问该变量,因为它来自不同的代码位置(外部库)。
然而,超出的代码可以工作,但它是好的风格(根据我的用例)吗?
我认为声明copyfunction
as const 的参数可以确保用户不会修改(只读)指针或源缓冲区本身的位置。因此,在这种情况下, const_cast 只是启用函数调用而不是故意删除指针的 const-ness 所必需的邪恶......
问候
c++ - 使用 const_cast 将 const 数据参数传递给参数为非常量的函数
我们可以使用 const_cast 将 const 数据参数传递给参数为非常量的函数。
但是,我们也可以通过以下方式实现铸造,
输出:20
那么,在这个特定场景中使用 const_cast 有什么需要呢?仅在这种特定情况下使用 const_cast 有什么好处吗?
c++ - const_cast 一个右值到 const ref
我觉得奇怪的是 const_cast 不允许将右值(例如临时变量)转换为 const 限定引用,尽管它与 static_cast 一起工作得很好。有没有人解释它为什么会这样?
请不要陷入“const_cast 是邪恶的”论点,我在这里要做的是正确理解 C++ 标准中处理 const_cast 和 rvalues 的部分。
c++ - 什么是多级指针?
在阅读有关内容时,const_cast
我遇到了以下句子:
const_cast 只能进行以下转换。特别是,只有 const_cast 可以用来抛弃(删除)常量或波动性。
1) 两个可能指向同一类型的多级指针可以相互转换,而不管每一级的 cv 限定符。
我已经用谷歌搜索了一下,还没有找到任何关于多级指针是什么的简洁、直接的定义。那么:究竟什么是多级指针?
(可能的手掌时刻)它只是一个指向指针的指针,或指向指针的指针,例如int **
或int ***
?
c++ - 在成员例程中使用 const_cast 可以避免重复代码吗
在这种情况下可以使用 const_cast 还是有任何警告:
其目的是 get 例程可能要复杂得多,并且应避免代码重复。
c++ - const_cast 的奇怪行为
考虑以下代码:
我声明了一个新的引用端,通过 const_cast 将它分配给值 a。然后我只是增加参考值打印地址和值。
我怎样才能在同一个地址中有2个不同的值?
c++ - 一个变量中的 2 个值(const 和 const_cast)c++
是什么让类型转换影响了这一点?值存储在哪里?
c++ - 不能对 const 对象使用 dynamic_cast
我想编写一个方法,其中Base
对象指针将作为参数传递,并在方法内部将其转换为派生对象指针。
但它显示错误,因为动态转换不能丢弃 const specifier。但我不明白为什么const
必须在这里删除说明符,我所做的只是创建一个派生指针,它应该指向基指针之后的某个偏移量。我也试过const Derived* const der = dynamic_cast<Derived*>(obj);
,但没有结果。
将参数作为 传递是很重要的const
。我怎样才能做到这一点?我必须以丑陋的方式先申请const_cast
吗dynamic_cast
?有没有更好的方法?
c++ - const_cast - 删除简单整数的常量。相同的内存位置具有不同的值
我正在使用 const_cast 来删除整数的常量。
输出:
谁能解释一下相同的内存位置如何保存不同的值?