草庐IT

const-cast

全部标签

c++ - 使用 const bool 引用进行后台任务取消跟踪? (C++)

我有一个桌面应用程序,当用户请求时,某些计算在后台线程中运行。有一个取消按钮。我知道向后台任务发出取消信号的“安全”或“正确”方式(使用Qt信号/槽连接、后台任务轮询的互斥体包装bool值等)。然而,在我看来最简单的事情是在我的主线程类中有一个boolcancelled,它在按下Cancel按钮时同步设置,并传递一个constbool&cancelled到它轮询的后台线程。这种方法是否有任何现实的方法会适得其反? 最佳答案 线程可以在不同的处理器上运行,每个处理器都有自己的缓存。如果bool值是原子的,你可以这样做。否则,您可能会面

C++ --- 错误 C2664 : 'int scanf(const char *,...)' : cannot convert argument 1 from 'int' to 'const char *'

我是C++的新手,我正在尝试构建这个非常简单的代码,但我不明白为什么会出现此错误:Error1errorC2664:'intscanf(constchar*,...)':cannotconvertargument1from'int'to'constchar*'代码如下://lab.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#includeintmain(intargc,char*argv[]){introw=0;printf("Pleaseenterthenumberofrows:");sc

c++ - static_casting a constexpr void* 的结果是常量表达式吗?

clang正在拒绝gcc允许的这段代码:intmain(){staticconstexprconstvoid*vp=nullptr;staticconstexprconstchar*cp=static_cast(vp);}具有以下内容:error:constexprvariable'cp'mustbeinitializedbyaconstantexpressionstaticconstexprconstchar*cp=static_cast(vp);阅读完N3797中的最终list后5.9/2我没有看到任何禁止在常量表达式中使用static_cast的内容。我是在看错地方还是误读了什么

c++ - 在编译时或运行时将 const char * 映射到 duck-typed T

我有很多类A、B、C、D等,它们都是鸭子类型的,因此具有相同的方法和接口(interface),但不是从同一个类继承的。例如classA{public:voidfoo();voidbar();}classB{public:voidfoo();voidbar();}classC{public:voidfoo();voidbar();}我想在运行时将constchar*映射到这些类之一的相应实例,例如“A”->Aa“B”->Bb这里a是类A的一些实例。或在编译时将'constchar*`映射到相应的类型,例如“A”->A我需要在其他一些函数调用中使用该对象的实例(即调用foo()或bar(

c++ - 显式构造函数和 static_cast

structFoo{explicitFoo(inta):m(a){}intpadd1,m,padd2;};voidBar(Foo){}intmain(){Bar(11);//OK,giveserrorautox=static_cast(37);x.m;}static_cast构造Foo对象是否可以,即使它的构造函数被标记为explicit?它适用于MSVC2013和GCChttp://ideone.com/dMS5kB 最佳答案 是的,static_cast将使用explicit构造函数。5.2.9Staticcast[expr.s

c++ - C++ 包装 C 代码的重复 const 错误

我从C++应用程序中包含并使用了一些C代码,这里是重要的部分:C代码ifdef__cplusplusextern"C"{endif...typedefvoid*problem_type;...intproblematic_fn_proto(constproblem_typeconstarg);ifdef__cplusplus}endif不幸的是,由于duplicate'const'错误,这将无法编译。导致问题的是typedef。如果我只是将函数的原型(prototype)更改为:intproblematic_fn_proto(constvoid*constarg);没有更多的问题。不幸

c++ - 同一函数的 const 和非 const 版本 - 反模式?

最近我检查了大量遗留C++代码,发现了一些我以前从未在生产C++代码中见过的东西:classFoo{public:voidBar(){std::cout(this)->Bar();}};这是一个巨大的反模式吗?我的意思是,该函数要么是const要么是非常量,提供两个版本有什么意义?这是某种“const-correctnesscheat”吗,它允许在这样的情况下调用const函数:voidInvokeBar(constFoo&foo){//ohboy!Ireallyneedtoinvokeanon-constfunctiononaconstreference!foo.Bar();}

c++ - 如何根据构造函数参数填充 const 成员数组?

假设我有这个类(class):templateclassA{public:A(constchar*s)...private:constcharbuf[N];};模板在那里,这样我就可以在没有动态内存分配(要求)的情况下配置数组大小。buf成员是const,因为它旨在在对象初始化后在对象的整个生命周期内保持不变。澄清一下,我也无权访问STL。我有什么选择来定义这个构造函数,以便我可以将s的内容复制到buf中?一个选项是const_cast,但我正在寻找不需要这个的替代方案。 最佳答案 @RichardHodges提供的解决方案要求使用

c++ - 为什么我不允许将返回 const char* 的函数的结果分配给 char*,但可以将字符串文字(常量)分配给 char*?

这个问题在这里已经有了答案:WhatisthetypeofstringliteralsinCandC++?(4个答案)关闭6年前。返回constchar*的函数不能分配给char*constchar*func(){return"Thisisaconststringtwo";}但是char*直接在main中赋值了一个常量字符串:intmain(){char*d="thisisaconststringone";//worksfinechar*e=func();//errorcannotconvertfrom'constchar*'to'char*'return1;}为什么矛盾?

c++ - static_cast 与直接调用转换运算符?

考虑下面的类,作为一个简单的例子:#include#includeusingnamespacestd;classpoint{public:int_x{0};int_y{0};point(){}point(intx,inty):_x{x},_y{y}{}operatorstring()const{return'['+to_string(_x)+','+to_string(_y)+']';}friendostream&operator(p);//Option1os应该直接调用转换运算符,还是只调用static_cast并让它完成工作?这两行几乎会做完全相同的事情(即调用转换运算符),据我所