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

c++ - C++:为什么 const_cast 是邪恶的?

我一直听到这个说法,虽然我真的找不到 const_cast 是邪恶的原因。

在以下示例中:

我正在使用引用,并且通过使用 const,我正在保护我的引用不被更改。另一方面,如果我不使用 const_cast,代码将无法编译。为什么 const_cast 在这里不好?

这同样适用于以下示例:

请给我一些例子,在这些例子中我可以看到使用 const_cast 是一个坏主意/不专业。

感谢您的任何努力:)

0 投票
4 回答
271 浏览

c++ - 强制外部函数为 const

这是我的问题。我创建了一个类,其成员函数声明为const使用我无法修改的外部函数(在其他人的代码中声明)并且未声明const。更确切地说

别人的代码

我的代码

我知道对于成员数据,我们可以通过使用来强制 const 正确性mutableor const_cast。我怎样才能“破解”foo让我的编译器明白我想像使用它一样使用它,即使它没有在其他人的代码中声明?

0 投票
2 回答
11658 浏览

c++ - C++ 与 static_cast 和“this”对象的 const_cast 添加 const-ness 的区别?

根据 Scott Meyers 的说法,为了防止在 getter 的 const 版本和 getter 的非常量版本中重复代码,请从非常量版本调用方法的 const 版本:static_cast<const A&>(*this).Methodology(); 但是,由于过度热心而意外使用我输入了 Visual Assist X Intellisense:const_cast<const A&>(*this).Methodology();它工作得很好。

在这种情况下,使用特定演员表有什么区别?

使用的 IDE:Visual Studio 2010。

0 投票
6 回答
9562 浏览

c++ - const void * 比 void * 提供什么价值?

在 C++ 中,将 aconst void *用于函数的参数类型是否有任何价值void *?由于 avoid *是不透明的,除了用户这样做之外,是否存在任何修改风险reinterpret_cast,在这种情况下,他们也可以const_cast在 a 上做同样的事情const void *,因此人们真的会买任何东西吗?我问是因为我使用了一个用于共享指针的实用程序模板类,它提供了一个专门化void以避免void &问题,但没有提供专门化const void,因此我想知道这只是一个疏忽还是永远不需要它?

0 投票
3 回答
88 浏览

c++ - Const_cast 允许将 const 修改为通向 const 的路径?

鉴于此代码(来自我的上一篇文章

输出是:10

应该是这样吗?我认为这段代码应该导致未定义的行为,因为j它是一个 const 。我错了吗 ?

谢谢

0 投票
1 回答
1049 浏览

c++ - const_cast:覆盖一个常量状态

我正在尝试使用 const_cast 运算符并尝试覆盖作为参数传递的参数 o 的 const 状态:

但是覆盖 o 的 const 状态会在 g++(GNU/Linux)中引发异常,在 VS 2010(Win)中它运行良好......

有没有更可靠的方法来覆盖函数参数的 const 状态?

更新:

MSDN 写道:您不能使用 const_cast 运算符直接覆盖常量变量的常量状态 :-(。

0 投票
3 回答
1489 浏览

c++ - const_cast 在 C++ 中失败

之后const_cast pListener为空。是否可以执行这种类型转换?

谢谢

0 投票
4 回答
4437 浏览

c++ - const_cast std::vector

我有一个带有类型的向量,const std::vector<const Array*> &objects它作为参数传递给该方法。

我想 const_cast 但由于某种原因我不能这样做。我试过了:

vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);

和其他一些方式,但它一直在抱怨。

有任何想法吗 ?

0 投票
1 回答
364 浏览

c++ - 语义冲突将指针传递给 const 指针到字节数组

我想从下面用原型定义的 OpenSSL 库中调用这个函数:

第二个参数in定义为a const unsigned char **,因为:

  • d2i_X509 不会修改指向的缓冲区中的数据*in
  • *in将从缓冲区解析的数据量增加。

现在这个原型是一个问题,因为据我所知,该函数不能以以下方式调用,据我所知,API 是调用它的正常方式(删除了错误管理代码以使事情变得更简单):

如果我尝试编译上面的代码,它会说:

我理解消息的基本原理(例如在此处解释),但在这种特殊情况下,此基本原理并不适用,因为函数在其文档中声明它只会增加 的值*in,而不会为其分配不相关的指针。

我无法将 p 的类型更改为,const unsigned char *因为上面的代码实际上是简化的,指针隐藏在一些执行读取和写入的抽象 IO 对象后面。前一个 IO 对象的好处是保持对称读写代码在一起,可以在我的 IO 对象中使用两个单独的指针进行读写,但这样做的总体好处非常小(如果不是负面的话)并添加很多语法噪音。由一些外部无关的 API 调用强制在 IO 对象中进行那种深度的内部变化,看起来真的很牵强。

一个解决方案可能是执行强制转换,甚至根本不使用返回的指针值(因为我有 size 参数),但感觉也不对。在这种情况下,似乎 d2i_X509 的原型没有包含足够的信息,或者编译器的 const 检查规则过于严格。

应该如何从 C++ 调用这样的 API?现在我只会使用演员表,因为我觉得它是较小的邪恶,但有没有更好的方法?

0 投票
3 回答
1095 浏览

c++ - C++。为什么我不能编译这段代码?使用 const_cast 删除 const 有什么问题?

我在使用 const_cast 删除 constness 时遇到了一些问题。错误消息说“转换是有效的标准转换.....”

这个问题的本质是什么?为什么我应该使用 C-style cast 代替?

"error C2440: 'const_cast' : cannot convert from 'const size_t' to 'size_t'"