这个问题在这里已经有了答案:Whataretheusecasesforhavingafunctionreturnbyconstvaluefornon-builtintype?(4个答案)关闭8年前。const的作用是什么?constObjectmyFunc(){returnmyObject;}我刚刚开始阅读EffectiveC++,第3项提倡这一点,Google搜索找到了类似的建议,但也有反例。我看不出在这里使用const会更好。假设按值返回是可取的,我看不出有任何理由保护返回值。给出的为什么这可能有用的示例是防止返回值的意外bool转换。那么实际的问题是应该使用explicit关键字
我有一个类structS{boolfoo(constAType&v)const{returnvalues.count(&v);//compileerrorduetotheconstnessofv}private:std::setvalues;};这是一个简化版本。在实际代码中,foo做了一些复杂的事情。代码产生错误invalidconversionfrom‘constAType*’to‘std::set::key_type{akaAType*}’我认为foo应该采用'constAType&v'因为它不会改变v。成员变量“values”的类型不能为std::set,因为结构S的某些方法调
我的具体问题是我有一个QMultiHashprivate成员,我想提供对散列值的访问权限,但要访问const项目的版本,声明:QListgetBars(Foof)const;有没有比丑陋/低效地创建带有const项目和复制的新容器更清洁/更有效的方式来“压缩”Qt容器内的项目来自源的指针(在本例中为QMultiHash::values())?恐怕答案可能是“否”,但我想确保我没有遗漏一些Qt/C++(03)语法魔法来做到这一点。 最佳答案 有两种方法。您提到的明显方法是使用C++11并将其自己转换为QList.QListgetLis
我是一名嵌入式C开发人员,最近开始在嵌入式设备上处理C++代码,并且不确定当类访问内存映射寄存器或外部设备上的数据等volatile数据时,const正确性如何应用,例如模数转换器(ADC)。例如,我有一些类通过指针访问设备的内存映射寄存器来连接到设备的硬件模块,如下所示:classIOPin{public:/*Constructor,destructor,othermethods...*///shouldthisbeaconstmethod?boolReadIOState(){returnportregs_->state;}private:/*Otherprivatestuff...
例如,考虑用伸展树(SplayTree)实现的std::map。这种树结构是可变的,每次访问map进行读取时都会发生变化。当map为const时,谁必须保证并发读取的隔离,是由用户代码还是由map实现决定的? 最佳答案 提问者知道,如果您有写入集合的线程,则用户必须管理同步锁定。问题似乎是如果同时线程只读取集合,标准是否可以保证线程安全。我不确定旧的C++标准是否对任何操作的线程安全有任何保证,但新标准会(部分已在评论中给出,23.2.2)。事实上,大多数供应商现在确实保证并发读取之间的线程安全,尽管集合中包含的对象内的并发性显然需
很多人都说“volatile成员函数完全类似于const的工作方式。”如果指针被标记为const/volatile,则它们在某种意义上非常相似,它只能访问标记为const/volatile的成员函数。但实际上将成员函数定义为const有一个额外的效果,它使该函数成为只读的。函数内部对象的任何修改都会导致编译器错误。volatile成员函数中有这样的类似物吗? 最佳答案 好吧,volatile成员函数将使对象成员成为volatile,也就是说,this就像定义了volatileT*constthis一样。因此,对成员变量的任何引用也是
正在查看boostasiossl_client.cppexample并在顶部找到了这个:enum{max_length=1024};想知道,这个和有什么区别吗namespace{constintmax_length=1024;}或staticconstintmax_length=1024;或者也许它们是绝对相等的,但这只是更短? 最佳答案 如果您将它用作值而不是引用,它们是等价的。enum{constantname=initializer};习语曾经在头文件中非常流行,因此您可以在类声明中毫无问题地使用它:structX{enum{
我遇到了一个C++习惯,我试图研究它以了解它的影响并验证它的用法。但我似乎找不到确切的答案。std::vectorgetThings();voiddo(){conststd::vector&things=getThings();}这里我们有一些返回非const&值的函数。我看到的习惯是在分配函数的返回值时使用const&左值。提出这个习惯的原因是它减少了拷贝。现在我一直在研究RVO(返回值优化)、复制省略和C++11移动语义。我意识到给定的编译器可以选择阻止通过RVO进行复制,不管这里是否使用了const&。但是,在防止复制方面,const&左值的使用对非const&返回值有任何影响吗
为什么我应该在header中声明一个私有(private)的staticconst变量(并在cpp中初始化它)而不是仅仅在cpp中定义+声明它?即案例1.hclassMyClass{...private:staticconstMyTypesome_constant;}case1.cppconstMyTypeMyClass::some_constant=...;案例2.h//Nomentionofsome_constantatall案例2.cppconstMyTypesome_constant=...;假设遵循常见的c++约定(1个header和cpp仅与1个类相关联,从不与#inclu
背景:我坚持使用arm-arago-linux-gnueabi-g++(GCC)4.3.3。尽管需要C++11或更高版本的答案也很受欢迎,但请明确表达任何晚于C++03的语言要求。对象的构造函数将值填充到表中以供算法使用。因为那些表不会改变也不应该改变,我希望它们是常量,我该怎么做?困难#1,这些值是通过计算生成的,我不想在源文件中对它们进行硬编码。困难#2,计算有时依赖于仅在运行时可用的输入。困难#3,我不知道为什么但我不希望数组是静态的,即使所有对象的值可能相同(值不依赖于运行时输入的情况)。困难#4,它是一个数组,因此C++03中的初始化列表将不起作用。编辑1:这篇文章发布几周后