草庐IT

Constants

全部标签

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - static 对 const 局部变量有影响吗?

想象以下声明:voidfoo(){conststd::arrayarr={/*alotofdifferentvalues*/};//dostuff}还有第二个:voidfoo(){staticconststd::arrayarr={/*alotofdifferentvalues*/};//dostuff}如果有的话,这两者之间可能存在哪些性能差异?这些解决方案是否存在任何危险? 最佳答案 暂时忘记数组。这混淆了两个不同的问题。您已经找到了解决生命周期和存储问题的答案。我将解决初始化问题。voidf(){staticconstintx

c++ - static 对 const 局部变量有影响吗?

想象以下声明:voidfoo(){conststd::arrayarr={/*alotofdifferentvalues*/};//dostuff}还有第二个:voidfoo(){staticconststd::arrayarr={/*alotofdifferentvalues*/};//dostuff}如果有的话,这两者之间可能存在哪些性能差异?这些解决方案是否存在任何危险? 最佳答案 暂时忘记数组。这混淆了两个不同的问题。您已经找到了解决生命周期和存储问题的答案。我将解决初始化问题。voidf(){staticconstintx

c++ - 在类型特征中,为什么人们使用 enum 而不是 static const 作为值?

例如,我就是这样写的,它编译和工作得很好:templatestructis_pointer{staticconstboolvalue=true;}那为什么有些人写的不那么明显templatestructis_pointer{enum{value=true};}相反?仅仅是因为staticconst变量使用了一个字节的内存,而enum没有? 最佳答案 一个显着的区别在于以下代码的编译和链接:templatestructis_pointer{};templatestructis_pointer{enum{value=true};};vo

c++ - 在类型特征中,为什么人们使用 enum 而不是 static const 作为值?

例如,我就是这样写的,它编译和工作得很好:templatestructis_pointer{staticconstboolvalue=true;}那为什么有些人写的不那么明显templatestructis_pointer{enum{value=true};}相反?仅仅是因为staticconst变量使用了一个字节的内存,而enum没有? 最佳答案 一个显着的区别在于以下代码的编译和链接:templatestructis_pointer{};templatestructis_pointer{enum{value=true};};vo

c++ - 为什么 scala 没有类似 C++ 的 const 语义?

在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对

c++ - 为什么 scala 没有类似 C++ 的 const 语义?

在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对