标记为家庭作业,因为这是我写的期中问题,但我不明白答案。我被要求在以下语句中解释每个const的用途:constcharconst*constGetName()const{returnm_name;};那么,每个常量的解释是什么? 最佳答案 从右边拿。;之前的那个告诉客户这是一个设计级别的常量,即它不会改变对象的状态。(将此视为只读方法。)好的,现在返回值:constcharconst*const这是一个指向okay的常量指针……我们开始吧!您有一个额外的const--一个语法错误。以下是等效的:constT或Tconst。如果你取
我这辈子都弄不明白这段代码有什么问题:ClassA&doSomething(std::setconst>const&someSet){std::set>secondSet;for(std::setconst>::const_iteratorit=someSet.begin();it!=someSet.end();it++){if(checkSomething(*it))secondSet.insert(boost::const_pointer_cast(*it));}}当我尝试编译时,在g++的第4行(for循环的开始)出现以下错误:/usr/include/c++/4.4/ext/n
谁能解释一下当右值引用作为函数参数时优先于const左值引用的情况?背景:我试图将一个const指针传递给一个函数。由于我必须考虑传入局部指针和传入临时指针的情况(比如从函数调用返回),我有两种选择:参数可以声明为:voidfoo(Tconst*const&);//constlvaluereftoconstptr或voidfoo(Tconst*&&);//rvaluereftoconstptr但是这个右值引用不能绑定(bind)到局部变量(它是左值类型。但我确实记得ScottMeyers创造了术语“通用引用”来指代右值引用。这让我更加困惑。)所以我的问题是,由于第一个声明可以处理这两种
在构造函数中修改const是C++标准吗?我正在修改我的struct删除固定值(默认成员初始值设定项)以便稍后在构造函数时设置它但我忘记删除const关键字并稍后注意到它。令我惊讶的是,我没有遇到编译错误,它工作正常,但对于测试用例2,它提供了一个编译器。它们有何不同?测试用例1:structA{constintx=2;A():x(3){}};测试用例2:structA{constintx=2;A(){x=3;//compileerror!error:read-onlyvariableisnotassignable}}; 最佳答案
我所知道的我知道返回临时对象的const引用是可以的!(像这个例子:)classA{public:virtualconstA&clone(){return(A());}virtualstd::stringname()const{return("A");}};Returningtemporaryobjectandbindingtoconstreference但是!如果我想这样做,它仍然是正确的:classB:publicA{public:virtualconstA&clone(){return(B());}virtualstd::stringname()const{return("B")
有一段C++代码:#includeintmain(){intb=sizeof('a');if(b==4)printf("I'maCprogram!\n");elseprintf("I'maC++program!\n");}像这样编译:gccmain.cpp-omain它成功并给出:I'maC++program!然后在函数main的某处添加一行int*p1=newint[1000];它失败了:C:\Users\...\AppData\Local\Temp\cccJZ8kN.o:main1.cpp:(.text+0x1f):undefinedreferencetooperatornew[]
这个问题在这里已经有了答案:Passingamodifiableparametertoc++function(12个答案)关闭12个月前。按引用传递和使用C指针表示法有什么区别?voidsome_function(some_type¶m)和voidsome_function(some_type*param)谢谢
只是好奇为什么参数在操作重载中必须是常量CVector&CVector::operator=(constCVector¶m){x=param.x;y=param.y;return*this;}难道你不能轻松地完成这样的事情吗??CVector&CVector::operator=(CVector¶m)//noconst{x=param.x;y=param.y;return*this;}不是当某些东西变成常量时,它在应用程序的剩余生命周期中是不可更改的吗??这在操作重载方面有何不同??? 最佳答案 你不需要常量:@nu
现在我觉得自己很愚蠢。我正在尝试在QtCreator中使用xlib做一些事情。我的代码:#include#includeintmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);Display*display=XOpenDisplay(NULL);return0;}只需一行代码即可:/main.cpp:8:undefinedreferenceto`XOpenDisplay'在Xlib.h中定义为externDisplay*XOpenDisplay(_Xconstchar*/*display_name*/);我觉得我缺少一些非常基
classFoo{public:Foo&operator=(constFoo&)=default;private:constinti=0;};为什么=default在那里被允许?它编译没有错误。我认为=default应该失败,因为它不可能分配给const变量?到底发生了什么? 最佳答案 当无法生成该函数时(就是这种情况),=default会将其生成为=deleted。如果您尝试使用该赋值运算符,您的编译器应该produceanerror. 关于c++-为什么=defaultonopera