我在C++中有以下类:classa{constintb[2];//otherstufffollows//andhere'stheconstructora(void);}问题是,我如何在初始化列表中初始化b,因为我无法在构造函数的函数体内初始化它,因为b是const?这不起作用:a::a(void):b([2,3]){//otherinitializationstuff}编辑:典型的例子是我可以为不同的实例设置不同的b值,但已知这些值在实例的生命周期内是恒定的。 最佳答案 使用C++11,这个问题的答案现在已经改变,您实际上可以这样做
在PHP和C#中,常量可以在声明时初始化:classCalendar3{constintvalue1=12;constdoublevalue2=0.001;}我有一个仿函数的以下C++声明,它与另一个类一起用于比较两个数学vector:structequal_vec{booloperator()(constVector3D&a,constVector3D&b)const{Vector3Ddist=b-a;return(dist.length2()这段代码用g++编译没有问题。现在在C++0x模式(-std=c++0x)下,g++编译器会输出错误消息:error:‘constexpr’n
这个问题在这里已经有了答案:Useof'const'forfunctionparameters(31个回答)关闭7年前。我在阅读我的C++书籍(Deitel)时遇到了一个计算立方体体积的函数。代码如下:doublecube(constdoubleside){returnside*side*side;}使用“const”限定符的解释是这样的:“const限定符应该用于强制执行最小权限原则,告诉编译器函数不修改变量端”。我的问题:这里使用“const”不是多余/不必要的,因为变量是按值传递的,所以函数无论如何都不能修改它? 最佳答案 c
我多次听到并阅读到,最好将异常捕获为对const的引用,而不是作为引用。为什么是:try{//stuff}catch(conststd::exception&e){//stuff}优于:try{//stuff}catch(std::exception&e){//stuff} 最佳答案 你需要:一个引用,以便您可以多态地访问异常一个const来提高性能,并告诉编译器你不会修改对象后者没有前者那么重要,但删除const的唯一真正原因是表明您想要对异常进行更改(通常只有在您想要将其与添加的上下文重新抛出到更高的级别)。
见主题。他们在想什么?更新:从“静态”更改为“内部链接”以避免混淆。举个例子...将以下内容放入文件中:constintvar_a=1;intvar_b=1;...用g++-ctest.cpp编译只会导出var_b。 最佳答案 我相信你的意思WhydoesconstimplyinternallinkageinC++确实,如果你在命名空间范围内声明一个const对象,那么它就有内部链接。附录C(C++11,C.1.2)给出了基本原理Change:Anameoffilescopethatisexplicitlydeclaredconst
我已经读过很多次了,在C或C++代码中强制执行const正确性不仅在可维护性方面是一个很好的做法,而且它还可以让你的编译器执行优化。但是,我也读到了完全相反的情况——它根本不影响性能。因此,您是否有示例说明const正确性可以帮助您的编译器提高程序的性能? 最佳答案 const正确性并不能提高性能,因为const_cast和mutable在语言中,并且允许代码符合地违反规则。这在C++11中变得更糟,您的const数据可能例如是指向std::atomic的指针,这意味着编译器必须尊重其他线程所做的更改。也就是说,编译器查看它生成的代
例如:operatorbool()const{returncol!=0;}col是一个整数。operatorbool()const是如何工作的? 最佳答案 表单的成员函数operatorTypeName()是转换运算符。它们允许使用类类型的对象,就好像它们是TypeName类型一样,当它们是时,它们会使用转换函数转换为TypeName。在这种特殊情况下,operatorbool()允许类类型的对象像bool一样使用。例如,如果您有一个名为obj的类类型的对象,则可以将其用作if(obj)这会调用operatorbool(),返回结果
我有:unsignedchar*foo();std::stringstr;str.append(static_cast(foo()));错误:invalidstatic_castfromtype‘unsignedchar*’totype‘constchar*’在C++样式中转换的正确方法是什么? 最佳答案 char*和constunsignedchar*被认为是不相关的类型。所以你想使用reinterpret_cast。但是,如果您要从constunsignedchar*转换为非const类型,则需要先使用const_cast。re
在EffectiveC++第03条,尽可能使用const。classBigint{int_data[MAXLEN];//...public:int&operator[](constintindex){return_data[index];}constintoperator[](constintindex)const{return_data[index];}//...};constintoperator[]确实与int&operator[]有所不同.但是呢:intfoo(){}和constintfoo(){}看起来他们是一样的。我的问题是,为什么我们使用constintoperator[
我知道它提高了可读性并减少了程序出错的可能性,但是它对性能的提高有多大?顺便说一句,引用和const指针之间的主要区别是什么?我会假设它们以不同的方式存储在内存中,但如何呢? 最佳答案 [编辑:好的,所以这个问题比我一开始想的要微妙。]声明指向const的指针或引用的const永远不会帮助任何编译器优化任何东西。(尽管请参阅此答案底部的更新。)const声明仅指示标识符将如何在其声明的范围内使用;它并不是说底层对象不能改变。例子:intfoo(constint*p){intx=*p;bar(x);x=*p;returnx;}编译器不