问题标签 [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 回答
193 浏览

c++ - C++ Const_Cast 是否引入新变量?

大家好!

根据输出,*p2 和 a 的值不同,*p2 为 5,a 为 2。

但是,p2 和 &a 是相同的。我很困惑...

你能帮我理解这是在哪里吗?

非常感谢你!

0 投票
2 回答
272 浏览

c++ - 在 C++ 中,作为类成员的引用应该是 const 或 non-const

考虑以下最小示例。

这不编译。下面的整个输出g++ -Wall

原因对我来说很清楚: const 关键字对我在第 8 行中的演员表感到不安。问题:我确实有时需要 Data 类std::vector,但有时需要const std::vector。就像有两门课:一门用于阅读Data,另一门用于阅读Data。但是,我不喜欢编写两个具有几乎冗余功能的 Data 类。我的问题:

  • 你能给出一个很好的解决方案来说明我如何实现我尝试做的事情main()吗?C++11 解决方案也很受欢迎:)
  • 这是iterator和的原因const_iterator吗?
0 投票
3 回答
7264 浏览

c++ - char * 和 const_cast 有什么区别(string.c_str())

我使用外部库来处理 2 个应用程序之间的 udp (OSC) 通信。要格式化将要发送的消息,该库需要一个 char*,但我从 UI 中得到一个必须转换的字符串。

当我处理代码的其他部分时,udp 部分是这样硬编码的:

并且工作正常。我认为很容易让它与我的字符串一起工作并写道:

但与第一个示例不同,我收到的消息格式正确,现在我只收到乱码。有人知道它来自哪里吗?

谢谢!

马蒂厄

编辑:我使用的代码:每次 OSCVal 发送消息的方法都会改变:

如果我必须改变 OSC 模式,我称之为:

0 投票
1 回答
115 浏览

c++ - 在工厂模型中使用 const_cast

如果我的命名不正确,请原谅/纠正我。

我一直不明白const_cast. 一般来说,在我看来,如果您必须使用,const_cast那么您的类/方法可能存在根本缺陷,除非您使用的是不正确的遗留函数。然而,我可能偶然发现了一个适合使用它的案例。我有一个大类,有几个成员在构造过程中分配,并在对象的使用寿命内保持不变。

因为这些对象经常被销毁和构造,所以我想尝试一下我认为被称为工厂模型的方法:我不想创建/销毁对象,而是将其检索/返回到未分配对象的缓存中。例如(当然是简化的):

我无法指定新名称,因为它是const. 这是一个很好的案例const_cast还是我错过了一个明显的选择?使用会const_cast导致性能下降吗?

0 投票
3 回答
207 浏览

c++ - 对 const_cast 感到困惑

我只是在学习一些 c++ 概念并遇到了上述 2 个概念。谁能解释我在上述 2 个示例程序中标记为错误的概念?

0 投票
3 回答
322 浏览

c++ - 是否从“this”中删除常量然后更改成员值会调用未定义的行为?

在回应我对另一个问题的一些答案的评论时,有人建议像

由于修改了 const 对象,因此调用未定义的行为。这是真的?如果不是,请引用允许这样做的 C++ 标准(请说明您引用的标准)。

对于它的价值,我一直使用这种方法来避免创建一个成员变量mutable,如果只有一个或两个方法需要写入它(因为 usingmutable使它可写入所有方法)。

0 投票
4 回答
2321 浏览

c++ - static_cast 和对指针的引用

谁能告诉我为什么这不能编译:

现在,如果您将静态转换替换为:

然后它会编译。

编辑:很明显,编译器将A*andB*视为独立类型,否则这将起作用。问题更多是关于为什么这是可取的?

0 投票
1 回答
106 浏览

pointers - inout-parameter - 用另一个替换一个 const 句柄

在一个对象中,我有一个常量句柄数组,指向另一个特定类的某个对象。在一种方法中,我可能希望将其中一个句柄作为 -inout参数返回。这里作为一个简化的例子:

我不想删除原始数组中的 const 。类B意味着对集合常量项的某种视图A。我是来自 C++ 的 D 新手。我是否搞砸了 D-way 中的 const 正确性?我已经尝试了几种方法来让它工作,但不知道如何让它正确。

如何在没有“邪恶”铸造的情况下执行此查找的正确方法?

0 投票
2 回答
13318 浏览

c++ - 从变量中删除 const-ness

我正在尝试从变量(char *)中删除 const-ness,但由于某种原因,当我尝试更改值时,const 变量的原始值仍然保持不变。

现在 str2 的值发生了变化,但 str1 的原始值保持不变,我在 Google 上查找过但找不到明确的答案。

使用 const_cast 并更改值时, const 变量的原始值是否也应更改?

0 投票
3 回答
152 浏览

c++ - 有没有更好的方法来初始化引用成员以引用同一类中的另一个成员

在任何人说任何话之前,我知道这可能不被推荐,但我仍然很好奇是否有更好的方法来做这件事,或者有理由不去做,这只是一件奇怪的事情。

我开始研究这个,因为我想直接使用类中语义命名的成员访问数组的元素,同时仍然能够迭代数组,而不必调用/创建一些 getter 或 setter 方法。

我有一个看起来像这样的类定义。

还有一个看起来像这样的构造函数。我的问题是。有没有更好的方法来做我在构造函数中所做的事情?

编辑

我是个白痴……你可以像 Jonathan Wakely 说的那样做。

我想我在尝试之前遇到了一些其他问题。那好吧。