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

c++ - 如何获取对对象的 const 引用并使用该引用更改对象(使用 const_cast)?

我有一个成员函数返回const对类实例的引用。

例子:

如何City *使用 const_cast 和 getReference() 获得指向 city1 的非常量?

此外,通过执行以下操作,我能够在不使用 const_cast 的情况下实现我想要的:(假设已经有一个 State 实例调用state1

如何从返回 const 引用甚至调用 setter 的函数中获取非常量引用?

感谢您的关注

0 投票
5 回答
837 浏览

c++ - 为什么在丢弃指向该对象的指针的常量而不是UB之后写入非常量对象?

根据 C++ 标准,如果对象最初不是本身,则可以放弃const指针并写入对象。const这样:

没关系,但是这个:

是UB。

原因是当对象本身是const允许编译器优化对它的访问时,例如,不执行重复读取,因为重复读取对不变的对象没有意义。

问题是编译器如何知道哪些对象实际上是const?例如,我有一个功能:

它被编译成一个静态库,编译器不知道它将被调用哪些对象。

现在调用代码可以这样做:

它会很好,或者它可以这样做:

这将是未定义的行为。

编译器应该如何遵守这些要求?如何在不让后者工作的情况下让前者工作?

0 投票
3 回答
782 浏览

c++ - const 强制转换为全局 var 并且程序崩溃(C++)

如果 'const int maxint=100;' 该函数将运行正常 定义放在主函数内,但如果放在外面,则会崩溃并弹出一条错误消息,称“访问冲突”。

有人说这是某种“未定义的行为”,我想知道确切的答案以及如何安全地使用 const 演员?

0 投票
3 回答
690 浏览

c++ - const_cast doesn't work c++?

I have the following code :

the output was :

why doesn't const cast work here ?

0 投票
1 回答
146 浏览

c++ - 进程间对象传递

我需要有一个具有一个活动的类,该活动在其自己的线程中每 5 秒执行一次。它是一种 Web 服务,因此需要指定一个端点。在对象运行时,主线程可以更改端点。这是我的课:

newEndpoint 对象是否需要声明为 volatile?如果读取处于某个循环中(以使编译器不对其进行优化),我当然会这样做,但在这里我不知道。

在每次运行中,该activity()函数都会检查新端点(如果有新端点,则将其传递给客户端并执行一些重新连接步骤)并完成其工作。

我锁定了互斥体,这意味着 newEndpoint 对象不能再更改,因此我删除了volatile类规范以便能够调用const方法。

setEndpoint 方法(从另一个线程调用):

这东西线程安全吗?如果不是,问题是什么?我需要 newEndpoint 对象是易变的吗?

0 投票
3 回答
416 浏览

c++ - 使用 const_cast 添加 const 时的未定义行为?

这个问题是关于我在const_cast制作char * const char *. 我知道这个转换是隐式完成的,当隐式进行转换时,它对不起作用。

有问题的代码是:

根据Linux 手册页 getenv()获取const char *并返回char*. 因此,根据我对 const 正确性的理解,我可以char*毫无问题地进行 const 强制转换。

所以,我的问题是,为什么const_cast在这里给我一个 UB(代码正在崩溃)但正如预期的那样没有const_cast(隐式转换)它的工作正常(所以问题必须与使用const_cast)有关?

请注意,我知道隐式转换是去这里的方式,通过这篇文章,我需要专门针对此处观察到的行为的答案。

编辑:

由于 So'ers 同胞无法重现该错误,因此我假设这是一些奇怪的运行时/编译器问题。但是,如果标准中提到了此类问题,请告诉我。

暂时我接受迈克的回答。

0 投票
2 回答
1272 浏览

c++ - C++ 非 const 到 const 转换编译错误

以下代码无法编译

我在 VS2010 中得到“无法将参数 1 从 'int [1]' 转换为 'const int * ” 和 gcc 中的类似错误

当我将声明更改为:

或者

它可以编译,但我不明白为什么它不接受非 const 变量声明

0 投票
5 回答
219 浏览

c++ - 在这里做一个 const 演员是否安全?

我已经编写了自己的通用树实现,并且在为它编写迭代器时,我遇到了 const 正确性的问题。我目前遇到的问题如下:

这是我编写的 DFS 迭代器的头文件:

所以我关心的是解引用运算符:

在那里做一个 const_cast 合适吗?我想知道如果用户将 const 对象放入容器中,这是否会导致问题?

0 投票
0 回答
136 浏览

c++ - 使用 C 风格的结构访问维护封装

假设我有一堂课:

这将允许 C 和 C++ 方法获取数据,但在设置时仍然验证有效数据。它可以按如下方式使用:

然而,一切都不是很好。这也允许一个特定的肮脏把戏:

如果我不希望人们首先滥用将其放入课堂的一半意义,会发生什么?我是否只是被迫不允许因为一个错误而对那些更喜欢(看似)直接访问成员的人留有余地,还是有一些技巧可以实际允许语法(用于阅读)和封装?


在不使用该方法的情况下保留我能想到的语法(这次保持一致)的最佳方法是:

这是否是为了保持旧语法和类稳定性而接近它的理想方式?我能想到的准确维护语法的唯一方法是将数据成员包装在一个小类中,但是对于您要应用它的每个类来说,这似乎需要做很多工作。

0 投票
9 回答
1498 浏览

c++ - C++ const cast,不确定这是否安全

这似乎是一个愚蠢的问题,但我真的需要澄清这一点:

这会给我的程序带来任何危险吗?

const_cast甚至需要吗?

如果我更改输入指针值,它将安全地工作std::string还是会产生未定义的行为?

到目前为止,唯一担心的是,每当我修改输入指针并使其无法使用时,这可能会影响字符串“some_text”。

感谢您给我一些提示,我想避免在我自己的脚上射击