草庐IT

Constants

全部标签

c++ - 从 "this"抛弃常量然后更改成员值会调用未定义的行为吗?

回应我对一些answerinanotherquestion的评论有人建议像voidC::f()const{const_cast(this)->m_x=1;}调用未定义的行为,因为const对象被修改。这是真的?如果不是,请引用允许这样做的C++标准(请说明您引用的标准)。为了它的值(value),我一直使用这种方法来避免使成员变量mutable如果只有一个或两个方法需要写入它(因为使用mutable使其对所有方法可写。 最佳答案 (尝试)修改const对象(C++11中的7.1.6.1/4)是未定义的行为。所以重要的问题是,什么是常

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++ - 数组初始化在 C++ 中使用 const 变量

这可以工作:constintsize=2;intarray[size]={0};编译错误:inta=2;constintsize=a;intarray[size]={0};为什么? 最佳答案 因为C++委员会的人是这么决定的。技术原因是用于初始化size的第一个表达式是常量表达式,可以在编译期间计算。这意味着编译器还可以知道数组的大小,并且可以在编译时完成分配(在这种情况下,“保留”可能是一个更合适的术语)。在第二种情况下,表达式不是常量表达式(给定C++定义)并且这种还原是不可能的。在第二种情况下,值确实在size初始化时固定,这

c++ - 同一地址的变量如何产生 2 个不同的值?

这个问题在这里已经有了答案:Twodifferentvaluesatthesamememoryaddress(7个答案)关闭5年前。考虑一下:#includeusingnamespacestd;intmain(void){constinta1=40;constint*b1=&a1;char*c1=(char*)(b1);*c1='A';int*t=(int*)c1;cout这个的输出是:40650xbfacbe8c0xbfacbe8c除非编译器进行优化,否则这对我来说几乎是不可能的。如何?

c++ - 为什么选择非常量版本而不是类的 const 版本?

测试代码如下:structA{operatorint();operatorint()const;};voidfoo(constint);现在,在调用时:foo(A());//callsA::operatorint()为什么会这样alwayschoosesthenon-constversion?即使使operatorconstint()const;对调用foo()也没有任何影响。除了标准引用,有人可以从逻辑上解释背后的原因吗? 最佳答案 A()为您提供一个非const限定的临时A对象。A()表达式是一个右值表达式,是的,但这不会使A对

C++ 常量引用语义?

考虑下面的示例应用程序。它展示了我所说的有缺陷的类设计。#includeusingnamespacestd;structB{B():m_value(1){}longm_value;};structA{constB&GetB()const{returnm_B;}voidFoo(constB&b){//assert(this!=&b);m_B.m_value+=b.m_value;m_B.m_value+=b.m_value;}protected:Bm_B;};intmain(intargc,char*argv[]){Aa;cout输出:原始值:1期望值:3实际值:4很明显,程序员被b的常

c++ - 如何使用 cpp 将宏转换为字符串?

GNU的cpp允许你像这样将宏参数转换成字符串#defineSTR(x)#x然后,STR(hi)被替换为"hi"但是如何将宏(不是宏参数)变成字符串呢?假设我有一个具有某些值的宏CONSTANT,例如#defineCONSTANT42这不起作用:STR(CONSTANT)。这会产生"CONSTANT",这不是我们想要的。 最佳答案 诀窍是定义一个调用STR的新宏。#defineSTR(str)#str#defineSTRING(str)STR(str)然后STRING(CONSTANT)根据需要生成"42"。

ios - 应用更新后引用常量文件中的旧值

我在我的应用程序中维护两个常量文件,其中一个文件包含使用#define定义的所有常量,另一个文件包含使用以下定义的所有常量:staticNSStringconst*holidaysearch=@"holidaySearch"基本上我使用它们来形成服务器调用的URL。我们的应用程序已经在应用程序商店中。因此,在我上周发布的应用程序更新中,我通过仅修改值对两个常量文件进行了更改。例如:staticNSStringconst*holidaysearch=@"getholidaySearch"(当在我的应用程序中实时意味着我已经更改了一个url)。但是当用户更新应用程序并运行应用程序时,常量仍

ios - 如何居中对齐我的 collectionView 单元格?

我试过这个解决方案here但它似乎只适用于垂直布局。我试图让它适用于水平布局。就我而言,我总是希望居中对齐的顶部有3个单元格,底部有2个单元格。示例: 最佳答案 我认为这应该对您有所帮助(我在委托(delegate)方法中定义了insets,因为否则collectionview只会将我的第一个部分居中而其他部分保持不变):funccollectionView(_collectionView:UICollectionView,layoutcollectionViewLayout:UICollectionViewLayout,inset

ios - 定义基于 BOOL 的常量

在我的iOS应用程序中,我有一个constants.h类,我在其中定义了kBorderWidth。对于Retina显示器,我希望它为0.5,这样边框的厚度为1个像素,而在非Retina显示器上,我希望它为1,以便它保持一个像素的厚度而不是更少。这是我现在的代码:#defineIS_RETINA([[UIScreenmainScreen]respondsToSelector:@selector(displayLinkWithTarget:selector:)]&&([UIScreenmainScreen].scale==2.0))#if__IS_RETINA==1#definekBord