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

c++ - 这是 const_cast 未定义的行为吗?

我想知道以下是否是未定义的行为

这是通过将 aint*视为a 来读取的未定义行为int const*吗?我认为这是未定义的行为,但我之前认为只添加const一般是安全的,所以我不确定。

0 投票
2 回答
4770 浏览

c++ - Can one override my const C++ member function returning a const pointer to a internal non-const array using const_cast?

I'm learning c++ and came across this const_cast operator. Consider the following example:

Now a user can do

Is this fine ? I mean modifying private data since the purpose of return const char* was to prevent changing private data. How do I prevent this ? (without using std::string)

0 投票
7 回答
2317 浏览

c++ - 静态 const 成员的 const_cast

以下代码与 GCC (4.2-4.6) 和 Clang (2.1) 都可以很好地编译,但是当我运行可执行文件时,它给了我“总线错误:10”。我不明白原因。

0 投票
7 回答
3173 浏览

c++ - const_cast 的未定义行为

我希望有人能准确地阐明 C++ 中未定义行为的含义。给定以下类定义:

如果我正确理解了以下代码中对引用和指针的两个 const_casts 将删除 Foo 类型的原始对象的 const-ness,但是通过指针或引用修改此对象的任何尝试都会导致未定义的行为。

令我困惑的是为什么这似乎有效并且会修改原始的 const 对象,但甚至不会提示我警告以通知我此行为未定义。我知道 const_casts 从广义上讲是不受欢迎的,但我可以想象这样一种情况,即缺乏对 C 风格转换可能导致 const_cast 的认识的情况可能会在不被注意的情况下发生,例如:

在什么情况下,这种行为可能会导致致命的运行时错误?是否可以设置一些编译器设置来警告我这种(潜在的)危险行为?

注意:我使用 MSVC2008。

0 投票
1 回答
5736 浏览

c++ - 变量值自行变化

我以前在编程时一直很困惑,但是这个很重要。基本上,我在一个 for 循环中设置了值,并在接下来的迭代中更改为下一个循环的值。

输出:

我现在唯一的猜测是 const 的东西,但它为什么会不断改变所有以前的数组元素是没有意义的......

0 投票
2 回答
9332 浏览

c++ - 有效地 const_cast-ing 一个常量引用参数

我有一个成员函数,它将常量引用参数传递给另一个对象。我想对这个参数进行 const_cast 以便在成员函数中轻松使用它。为此,以下哪个代码更好?:

你能比较一下这两种形式吗?哪个在速度和内存使用标准方面更好?

0 投票
3 回答
322 浏览

c++ - 模板中的隐式 const 强制转换

我遇到了类似于下面的代码片段的东西,它会引发编译器错误,因为它使用const_iterator. 有没有理由vec.end()instd::copy没有隐式地得到一个const演员?

0 投票
2 回答
1987 浏览

c++ - 为什么 const_cast away volatile 仅适用于指针

我想知道,为什么const_cast只为指针工作?我怎样才能使第二种情况编译?

0 投票
2 回答
603 浏览

c++ - 我是否正确地说 const_cast 然后修改绑定到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。


在 IRC 上,有人问:

绑定到临时对象const_cast的引用是否可以接受?const

翻译:他有一个 ref-to-const 绑定到一个临时的,他想抛弃它的const-ness 来修改它。

我的回答是我之前问过一个类似的问题,其中的共识似乎是临时工本身并不是天生const的,因此您可以摆脱const对他们的引用的-ness,并通过结果修改它们. 而且,只要那个原始的 ref-to-const仍然存在,这不会影响临时的生命周期。

那是:

我对吗?


(当然,这样的代码是否真的可取完全是另一回事!)

0 投票
5 回答
2543 浏览

c++ - 可以投一对吗对一对?

所以我有一个智能迭代器来模拟映射 const_iterator,它需要在内部构建返回类型。显然,我想将 a 存储pair<Key, Value>在我的迭代器类中(因为我需要修改它),但同时我希望取消引用函数呈现 a pair<const Key, Value>(实际上它分别是 aconst pair<const Key, Value>&const pair<const Key, Value>*)。到目前为止,我提出的唯一解决方案是每次更改我的迭代器类指向的值更改时动态分配一个新对。不用说,这不是一个好的解决方案。

我也试过*const_cast<const pair<const Key, Value> >(&value)wherevalue被声明为pair<Key, Value>.

任何帮助将不胜感激(正如无法做到的知识一样)。

编辑

对于好奇:我最终将 a 存储pair<const Key, Value> p在我的迭代器类中。为了更改对,我根据底层迭代器 ( map<Key, Value>::const_iterator it)分别更改两个元素,const_cast设置键以便可以更改它,如下所示:

这不是我非常满意的解决方案,但它完成了工作,并且取消引用方法很高兴,因为我存储了正确类型的东西,它们可以引用。