草庐IT

CONST_MNEMONIC

全部标签

c++ - Const 正确性 : const char const * const GetName const (//stuff);

标记为家庭作业,因为这是我写的期中问题,但我不明白答案。我被要求在以下语句中解释每个const的用途:constcharconst*constGetName()const{returnm_name;};那么,每个常量的解释是什么? 最佳答案 从右边拿。;之前的那个告诉客户这是一个设计级别的常量,即它不会改变对象的状态。(将此视为只读方法。)好的,现在返回值:constcharconst*const这是一个指向okay的常量指针……我们开始吧!您有一个额外的const--一个语法错误。以下是等效的:constT或Tconst。如果你取

c++ - 编译错误 - std::set with const 成员

我这辈子都弄不明白这段代码有什么问题: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

c++ - (右值引用)VS(const 左值引用)作为 C++11 中的函数参数

谁能解释一下当右值引用作为函数参数时优先于const左值引用的情况?背景:我试图将一个const指针传递给一个函数。由于我必须考虑传入局部指针和传入临时指针的情况(比如从函数调用返回),我有两种选择:参数可以声明为:voidfoo(Tconst*const&);//constlvaluereftoconstptr或voidfoo(Tconst*&&);//rvaluereftoconstptr但是这个右值引用不能绑定(bind)到局部变量(它是左值类型。但我确实记得ScottMeyers创造了术语“通用引用”来指代右值引用。这让我更加困惑。)所以我的问题是,由于第一个声明可以处理这两种

c++ - 在构造函数 C++ 标准中修改 const 吗?

在构造函数中修改const是C++标准吗?我正在修改我的struct删除固定值(默认成员初始值设定项)以便稍后在构造函数时设置它但我忘记删除const关键字并稍后注意到它。令我惊讶的是,我没有遇到编译错误,它工作正常,但对于测试用例2,它提供了一个编译器。它们有何不同?测试用例1:structA{constintx=2;A():x(3){}};测试用例2:structA{constintx=2;A(){x=3;//compileerror!error:read-onlyvariableisnotassignable}}; 最佳答案

c++ - 返回子类的 const 引用

我所知道的我知道返回临时对象的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++ - 为什么必须在运算符重载中提供关键字 const

只是好奇为什么参数在操作重载中必须是常量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

c++ - 为什么 =default on operator= 在有 const 成员时编译?

classFoo{public:Foo&operator=(constFoo&)=default;private:constinti=0;};为什么=default在那里被允许?它编译没有错误。我认为=default应该失败,因为它不可能分配给const变量?到底发生了什么? 最佳答案 当无法生成该函数时(就是这种情况),=default会将其生成为=deleted。如果您尝试使用该赋值运算符,您的编译器应该produceanerror. 关于c++-为什么=defaultonopera

c++ - clang 3.3 和 GCC 4.7 const v 的 constexpr

我刚刚尝试在Ubuntu13.04上使用带有GCC4.7.3标准库头文件的clang3.3编译大量代码。这一切都很顺利,除了一个问题。这段代码已经在这台机器上用标准的Ubuntuclang3.2包编译,所以我假设这是clang3.3编译器的一些变化。与使用复杂header的const和constexpr有关的问题。特别是复杂类型具有以下代码块#ifdef__GXX_EXPERIMENTAL_CXX0X__//_GLIBCXX_RESOLVE_LIB_DEFECTS//DR387.std::complexover-encapsulated.constexprdoublereal(){re

c++ - 为什么一旦我将引用声明为 const,它就可以接受不同类型的数据?

你好,我想弄清楚这件事..假设我有这段代码。inta=5;double&b=a;//Error.然后,一旦我将第二行声明为const,编译器就不会再报错了。constdouble&b=a;//Correct.背后到底是怎么回事,为什么const解决了问题。 最佳答案 一个int需要先转换为double。该转换会产生一个临时纯右值,并且这些不能绑定(bind)到对非常量的引用。对const的引用将延长临时变量的生命周期,否则临时变量会在创建它的表达式末尾被销毁。{inta=0;floatf=a;//atemporaryfloatisc

c++ - operator const char* 以奇怪的方式覆盖(?)我的另一个变量

#include#includeclassVector{double_x;double_y;public:Vector(doublex,doubley):_x(x),_y(y){}doublegetX(){return_x;}doublegetY(){return_y;}operatorconstchar*(){std::ostringstreamos;os这个程序的输出:$./a.outVectorw1(1.1,2.2)Vectorw2(3.3,4.4)Vector(3.3,4.4)Vector(3.3,4.4)我不明白为什么会得到输出。似乎是“constchar*n2=w2;”覆盖