const-cast相关内容
我有一个C++11头文件,它有一个声明为my_const_value的常量值。以及一个名为GetValue的函数,该函数使用const值运行复杂逻辑并返回期望值。 我想用my_const_value的不同值对GetValue进行单元测试。 我知道这不可取,但为了编写GetValue的单元测试,我希望使用不同的my_const_value值来测试GetValue。在C++中是否有一些类似
..
为什么下面的方法 getRanks() 编译不出来,我该如何优雅地修复它? 我想要做的就是定义一个返回成员引用的成员访问器方法.引用不是 const 因为我以后可能会修改它所引用的内容.但是由于成员方法不修改对象,所以我将它声明为const.编译器(clang,std=c++11)然后坚持认为存在“删除限定符"的“引用绑定".但我不会放弃预选赛,是吗?如果我是,为什么: struct te
..
是否允许: const int const_array[] = { 42 };int maybe_inc(bool write, int* array) {如果(写)数组[0]++;返回数组[0];}int main() {return may_inc(false, const_cast(const_array));} 特别是,是否可以抛弃 const_array 的 const
..
在 C++ 中,我有一个只需要对数组进行只读访问但被错误地声明为接收非常量指针的函数: size_t countZeroes( int* array, size_t count ){size_t 结果 = 0;for(size_t i = 0; i
..
我想检查一下我对此事的理解和结论. 在 IRC 上,有人问: const_cast 是否可以接受绑定到临时对象的 const 引用? 翻译:他有一个 ref-to-const 绑定到一个临时的,他想抛弃它的 const-ness 来修改它. 我的回答是我问过 a之前类似的问题,其中的共识似乎是临时人员本身并不是天生的const,因此您可以摆脱引用的const-ness您必须
..
我有一个看起来像这样的旧函数: int Random() 常量{返回 var_ ?4:0;} 我需要在该遗留代码中调用一个函数,使其现在看起来像这样: int Random() 常量{返回 var_ ?新呼叫(4):0;} 问题是我收到了这个错误: 在成员函数'virtual int Random() const'中:class.cc:145:错误:将 'const int' 作为 'i
..
用下面的代码 void TestF(const double ** testv){;}无效调用测试(){双**测试;测试F(测试);} 我明白了: 'TestF' : 无法将参数 1 从 'double **' 转换为 'const double **' 我不明白为什么.为什么 test 不能被无声地转换为 const double**?我为什么要明确地这样做?我知道 TestF(con
..
有什么好的方法可以避免下面的 const_cast,同时保持 const 的正确性吗? 如果没有 const_cast,下面的代码将无法编译.set::find 获取对集合键类型的 const 引用,因此在我们的例子中,它保证不会更改传入的指针值;但是,它不能保证不改变指针指向的内容. C 类 {上市:std::setm_set;bool isPtrInSet(const in
..
我想检查一下我对此事的理解和结论. 在 IRC 上,有人问: const_cast 是否可以接受绑定到临时对象的 const 引用? 翻译:他有一个 ref-to-const 绑定到一个临时对象,他想抛弃它的 const-ness 来修改它. 我的回答是我问了a之前类似的问题,其中的共识似乎是临时变量本身并不是固有的 const,因此您可以摆脱引用的 const-ness你
..
我找不到关于 const_cast 的太多信息.我能找到的唯一信息(在 Stack Overflow 上)是: const_cast() 用于添加/删除变量的 const(ness)(或 volatile-ness). 这让我很紧张.使用 const_cast 会导致意外行为吗?如果是,那是什么? 或者,什么时候可以使用 const_cast? 解决方案 const_ca
..
我一直听到这种说法,虽然我实在找不到 const_cast 是邪恶的原因. 在下面的例子中: template void OscillatorToFieldTransformer::setOscillator(const SysOscillatorBase&src){OscillatorSrc = const_cast*>(&src);} 我正在使用引用,并且通过使用 const,我可以
..
在我的工作中,const_cast 的使用在某些情况下是不可避免的. 现在我必须const_cast一些非常复杂的类型,实际上我不想在const_cast表达式中编写所有这些类型的混乱,特别是如果杂乱很长. 我的第一个想法是编写 const_cast(myType),但我的编译器无法推导出 myType 的非常量类型.所以我想帮助我的编译器,我设计了以下方法,它可以编译. #in
..
我知道将const指针强制转换为非const类型可能是未定义的行为,但是如果该指针最初不是const怎么办? int i = 0;int * pi =& i;const int * const_pi = const_cast(pi);int * non_const_pi = const_cast(const_pi);* non_const_pi =
..
我了解 const_cast 可以使用指针和引用. 我假设 const_cast 的输入应该是指针或引用.我想知道如果输入是对 const int 的指针/引用,为什么不删除constness? 以下代码按预期工作. const_cast (带有多级指针) int main(){使用std :: cout;#定义endl'\ n'const int * ip = new in
..
按照Scott Meyers的说法,为防止getter的const版本和getter的非const版本中的代码重复出现,请从非const版本中调用方法的const版本: static_cast(* this).Methodology(); 然而,由于我输入的Visual Assist X Intellisense过于狂热,导致意外使用: const_cast
..
根据[expr.cast]/4,C风格的强制转换按顺序尝试以下强制转换: const_cast static_cast static_cast 后跟 const_cast reinterpret_cast reinterpret_cast 后跟 const_cast 以下演员表的格式正确: const_cast(static_cast
..
C ++的新手和学习const_cast的方法—会被下面的代码迷惑: int main(){const int j = 1;int * p =(int *)(& j);cout
..
在此示例中,c样式是否强制转换为 int& ,然后进行分配以对类型为 A的接口进行黑客入侵未定义行为? A类 { public: A () :x(0) { } 〜A() { std :: cout
..
在回应我对另一个问题的答案的评论时有人提出类似建议 void C :: f()const { const_cast(this)-> m_x = 1 ; } 由于定义了const对象,因此调用了未定义的行为。这是真的?如果不是,请引用允许这样做的C ++标准(请提及您引用的标准)。 对于它的价值,我一直使用它避免使成员变量 mutable 只需
..
代码说出一千多个单词,所以... 这是对 const int : struct foo { int x; void Modify(){x = 3; } }; void test_foo(const foo& f){ const_cast(f).modify(); } int main(){ const foo f {2}; test_f
..