草庐IT

const_cast-ing

全部标签

c++ - list 常量与 C++ 关键字 "const"

阅读Meyers的书(第2项“Preferconstto#define”)我想理解下面列出的一些句子:引用#defineASPECT_RATIO1.653和constaspect_ratio=1.653之间的比较,Meyers提出“......在浮点常量的情况下(例如在这个例子中)使用常量可能会产生比使用​​#define更小的代码。”问题是:Meyers的代码越小,意味着可执行文件的磁盘空间越小?为什么变小了?我认为这在32位系统上可能有效,因为在这种情况下int(或指针)需要4个字节和一个双8字节。因为ASPECT_RATIO可能不会进入符号表,所以名称会被值替换,而在其他情况下可

c++ - 从 Derived** 到 Base*const* 的转换

请在链接parashift之前阅读我的问题,我可以谷歌搜索,这种情况略有不同。这是不允许的Child**cc;Base**bb=cc;因为你可以做到*bb=newOtherChild;但是如果我们有Child**cc;constBase*const*constbb=cc;我不认为所有这些常量对于我的示例都是必需的,但只是为了确定..我认为应该工作的最低限度是Base*const*bb=cc;那你不能这样做*bb=newOtherChild;所以应该是安全的。但为什么不允许呢? 最佳答案 你混淆了两种情况:添加const上行虽然形式上

c++ - 构造函数中的 const int ref 可以安全地绑定(bind)到文字吗?

我知道该标准有一个关于延长临时对象生命周期的异常(exception),基本上说在构造函数中绑定(bind)一个const引用不会延长生命周期,但这是否也适用于文字?例如:classC{private:constint&ref;public:C(constint&in):ref{in}{}};如果我有一个函数返回这种类型的对象Cf(){Cc(2);returnc;}如果我知道c.ref的值会在调用者中未定义吗? 最佳答案 否。构造函数完成执行后,您将无法使用该引用。当非类类型的纯右值绑定(bind)到相同类型的const引用时,总是

c++ - 与 const 引用关联的临时对象的生命周期(方法链接)

考虑以下代码片段:#includestructS{~S(){std::coutOutput:2dtor即对象生命周期通过引用扩展,这在Herb的article中有解释。.但是,如果我们只更改一行代码并写成:constS&s=S().f(1);对已销毁的对象调用f(2):Output:1dtor2为什么会这样?f()的返回值不是正确的“时间性”类型吗? 最佳答案 当你这样写一个函数时......constS&f(inti)const{std::cout...您指示编译器返回constS&并且您负责确保引用的对象具有适合调用者使用的生命

c++ - 是否可以在编译时检查 const 值是否已知?

目前,我正在重写/扩展我的C++实用程序库,以考虑新的C++11功能。其中一个新增功能是模板类,它提供一组数字的最大值,希望在编译时提供。templateclassConstMax{private:templatestaticconstexprTMax(Ts...xs);templatestaticconstexprTMax(Txx){returnx;}templatestaticconstexprTMax(T1x,T2y,Ts...xs){returny>x?Max(y,xs...):Max(x,xs...);}public:staticconstTValue=Max(Xs...);

c++ - 在 C++ 中尽可能使用 const?

正如EffectiveC++一书中所述:“尽可能使用const。”,人们会假设这个定义:Vec3foperator+(Vec3f&other);会更好地定义作为Vec3foperator+(constVec3f&other)const;或者甚至更好作为constVec3foperator+(constVec3f&other)const;。或者一个包含5个const关键字的例子:constint*constFoo(constint*const&)const;当然,您应该只在可能存在的地方包含const。我问的是尽可能使用它们是一种好习惯吗?虽然它确实为您提供了更多错误安全代码,但它可能会

c++ - 重载运算符 : const vs non-const return type : any difference of performance?

如果我们去维基百科article关于C++运算符,我们有一个例子:Addition:a+b->TT::operator+(constT&b)const;因此运算符返回类型为T的非常量。如果我们看这个guideline作者说返回类型应该是const以避免以下语法:(a+b)=c现在假设我不介意这种语法,并考虑a和b是大数组。从“纯”性能的角度来看,返回类型中缺少const关键字是否会阻止编译器的优化(g++和带有-O3的英特尔icpc)?如果答案是"is",为什么? 最佳答案 这是一个有趣的问题。在C++03中,没有更好的机会使用这两

c++ - Const temporary from template type 以及为什么使用 std::add_const?

以下代码摘自cppreference.com.#include#includestructfoo{voidm(){std::coutvoidcall_m(){T().m();}intmain(){call_m();call_m::type>();}但是,当使用VC++Nov2012CTP编译时,输出为Non-cvNon-cv而不是预期的:Non-cvConst另外,下面两个语句有什么区别:call_m();和call_m::type>(); 最佳答案 这似乎是MSVC的一个错误。使用T()形式的表达式(就标准而言,这是一种显式类型转

c++ - 我可以使用 const 引用而不是 getter 函数吗?

我只是想知道如果我只允许一个const引用变量,我是否可以绕过使用getter,如下所示#includeclasscTest{private:intm_i;std::stringm_str;public:constint&i;conststd::string&str;cTest(void):i(m_i),str(m_str){}};intmain(intargc,char*argv[]){cTesto;inti=o.i;//workso.i+=5;//failso.str.clear();//failsreturn0;}我想知道为什么人们似乎根本不这样做。我缺少一些严重的缺点吗?请贡献

c++ - 在处理低级字节操作时 reinterpret_cast 不好吗?

我正在编写一个websocket服务器,我必须处理需要取消屏蔽的屏蔽数据。掩码是unsignedchar[4],数据也是unsignedchar*buffer。我不想逐字节异或,我更愿意一次异或4个字节。uint32_t*constend=reinterpret_cast(data_+length);for(uint32_t*i=reinterpret_cast(data_);i!=end;++i){*i^=mask_;}在这种情况下使用reinterpret_cast有什么问题吗?替代方案是以下代码,它不那么清晰且速度不快:uint64_tj=0;uint8_t*end=data_+