草庐IT

const_cast-ed

全部标签

c++ - 无法在参数传递中将 'const char*' 转换为 'WCHAR*'

我在文档中写道,用户名、IP和密码必须是constchar*,当我将变量放入constchar时,出现此错误消息。这是我的代码:#include#include#include#includeusingnamespacestd;typedefint(__cdecl*MYPROC)(LPWSTR);intmain(){HINSTANCEhinstDLL;MYPROCProcAdd;hinstDLL=LoadLibrary("LmServerAPI.dll");if(hinstDLL!=NULL){ProcAdd=(MYPROC)GetProcAddress(hinstDLL,"LmSer

c++ - 使用(float&)int可以进行类型修剪,(float const&)int可以像(float)int那样转换吗?

VS2019版本x86。templatefloatget()const{intf=_mm_extract_ps(fmm,i);return(floatconst&)f;}当使用return(float&)f;编译器使用时extractpsm32,...movssxmm0,m32。正确的结果当使用return(floatconst&)f;编译器使用时extractpseax,...movdxmm0,eax。错误的结果T&和Tconst&首先是T,然后是const的主要思想。const只是程序员的某种协议(protocol)。您知道您可以解决它。但是汇编代码中没有任何const,只能输入f

c++ - 为什么这个 auto_ptr 的 dynamic_cast 会失败?

#include"iostream"classA{private:inta;public:A():a(-1){}intgetA(){returna;}};classA;classB:publicA{private:intb;public:B():b(-1){}intgetB(){returnb;}};intmain(){std::auto_ptra=newA();std::auto_ptrb=dynamic_cast>(a);return0;}错误:不能dynamic_cast`(&a)->std::auto_ptr::get()const 最佳答案

c++ - 结合 boost::lexical_cast 和 std::transform

我想写这样的东西,不能编译:std::vectoras;std::vectorbs(as.size());std::transform(as.beginn(),as.end(),bs.begin(),boost::lexical_cast);但这行不通,所以我创建了一个仿函数来为我做这件事:templatestructlexical_transform{templateDestoperator()(constSrc&src)const{returnboost::lexical_cast(src);}};有更简单的方法吗? 最佳答案

c++ - 当字符串超出范围时,将 string::c_str() 分配给 const char*

我对基本的C++用法有疑问。下面的代码使用gcc/LInux编译,打印正确。字符串test超出范围,所以它的c_str()值也应该无效,不是吗?我错了还是我误解了constchar*的意思?#includeintmain(){constchar*a="aaaa";std::cout 最佳答案 你是对的,你的代码无效,因为它使用了一个生命周期已经结束的对象。它是“偶然”起作用的,你不能依赖它。 关于c++-当字符串超出范围时,将string::c_str()分配给constchar*,我们

c++ - 从 const 方法调用成员的非常量方法

我很惊讶地发现“常量”中的这个“洞”:#includeclassA{intr;public:A():r(0){}voidnonconst(){puts("Iaminurnonconstmethod");r++;}};classB{Aa;A*aPtr;public:B(){aPtr=newA();}voidgo()const{//a.nonconst();//illegalaPtr->nonconst();//legal}};intmain(){Bb;b.go();}所以基本上从const方法B::go(),你可以调用non-const成员函数(恰如其分地命名为nonconst())如果

c++ - 这个 C++ const 引用访问器接口(interface)习惯用法有什么问题吗?

我正在将一个结构体转换为一个类,这样我就可以为我的变量强制执行一个setter接口(interface)。不过,我不想更改所有读取变量的实例。所以我转换了这个:structfoo_t{intx;floaty;};为此:classfoo_t{int_x;float_y;public:foot_t():x(_x),y(_y){set(0,0.0);}constint&x;constfloat&y;set(intx,floaty){_x=x;_y=y;}};我对此很感兴趣,因为它似乎模拟了C#的公共(public)只读属性的想法。编译正常,我还没有发现任何问题。除了在构造函数中关联const

c++ - 诺基亚是否误用了 static_cast?

我刚遇到thisexample:向下滚动到页面底部,您会在此处找到QWidget*pw=static_cast(parent);Parent的类型为:QObject,它是QWidget的基类,所以在这种情况下,不是:应该使用dynamic_cast吗?例如:QWidget*pw=dynamic_cast(parent)谢谢, 最佳答案 如果您知道您是从基类向下转型到子类(即,您知道该对象实际上是子类的一个实例),那么static_cast是完全合法的(并且性能更高)。 关于c++-诺基亚

c++ - 无法在 C++ 中调用 const 引用参数的方法

classA{public:A(){};~A(){};voidmethod(){};};voidcall(constA&a){a.method();//IcannotcallthismethodhereifIuse"const"butIcancallitifnotusing"const"}intmain(){Aa;call(a);return0;}在这种情况下,错误是:“将constA作为voidA::method()的参数传递会丢弃限定符[-fpermissive]|”在函数call中,如果我使用const,我会得到错误,但如果我去掉它,它就会工作。谁能帮我解释一下?

c++ - 如何将 boost::any_cast 转换为 std::string

我有这个测试片段#include#include#include#include#includeclasswrapper{intvalue;charcharacter;std::stringstr;public:wrapper(inti,charc,std::strings){value=i;character=c;str=s;}voidget_data(){std::coutcontainer;container.push_back(10);container.push_back(1.4);container.push_back("Mayukh");container.push_ba