草庐IT

constness

全部标签

c++ - 从函数返回 const 对象会阻止从外部进行 move 构造吗?

给定这个函数和函数调用:std::stringGetString(){std::stringstreamsstr;constautostr=sstr.str();returnstr;}constautoreturnedStr=GetString();当我将str声明为const时会省略move构造吗? 最佳答案 在您的情况下,returnedStr将从GetString()的返回值move构造,但该返回值将从str复制构造(1)。如果str不是const,则返回值将从它move构造。注意,在这两种情况下,返回值优化仍然适用,因此编译

c++ - 错误 : passing 'const …' as 'this' argument of '…' discards qualifiers

error:passing'constA'as'this'argumentof'voidA::hi()'discardsqualifiers[-fpermissive]我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。#includeclassA{public:voidhi(){std::cout@edit我使用const正确性修复了它,但现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递对这个方法的引用。#includeclassA{public:voidsayhi()const{hello();world();}voidhel

c++ - 为什么这个静态 const int 成员变量似乎可以在数组定义中公开访问?

我做出以下声明:classServo{protected:staticconstintmaxServos=16;staticServoservos[maxServos];//Arraydeclaration};ServoServo::servos[Servo::maxServos];//Arraydefinition...它可以编译,这很棒!但是我不明白它为什么会编译,因为在我看来maxServos是protected,并且在定义数组时我在全局范围内使用它。我尝试在另一个全局上下文中使用它,确实出现了编译错误:intmain(){std::cout那么发生了什么?数组的整个定义是否以某

c++ - 为什么 C++ 不对指针数据强制执行 const?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whyisn'ttheconstqualifierworkingonpointermembersonconstobjects?考虑以下具有指针成员int*a的类。编译器允许使用const方法constMod,即使它修改了指针数据。为什么编译器不在const方法的上下文中使指针数据为const?如果a只是一个int,我们就不能在const方法中修改它。classConstTest{public:ConstTest(int*p):a(p){}voidconstMod()const{++(*a);}int*a;};

字符串文字的 C++ const 正确性

这个问题在这里已经有了答案:WhatisthetypeofstringliteralsinCandC++?(4个回答)关闭9年前。根据C++标准,字符串字面量类型是arrayofconstcharautoconstStr="aaa";char*nonConstStr=constStr;//Errorhere,cannotconvertfrom'constchar*'to'char*'char*stillNonConstStr="aaa";//WhyIdon'thaveerrorhere?你能解释一下为什么在第3行我没有收到错误吗? 最佳答案

c++ - 在成员函数末尾添加 const 是否是一种好习惯 - 在适当的情况下?

在C++中,在成员函数定义的末尾添加const是否是一种好习惯每次函数不修改对象,即每次函数“符合条件”时为常量?我知道在这种情况下这是必要的:classMyClass{public:intgetData()const;};voidfunction(constMyClass&m){inta=m.getData();dosomething...}但除此之外,以及将const用于实际功能的其他用途,是否将const添加到末尾实际上会改变代码的执行方式(更快/更慢),或者它只是编译器处理此类情况的“标志”像上面那个?换句话说,如果类中的功能不需要const(最后),添加它有什么不同吗?

c++ - 为什么 C++ 类型默认不是 const ?

Gurus到处都告诉我们要const除非我们需要修改它,但标准使一切都是可变的,直到我们声明它const。我在这里遗漏了什么,或者这是一个矛盾?为什么C++类型默认不是const,而根据专家(其中一些人可能设计了标准),它们应该是madeconst默认情况下? 最佳答案 Guruseverywheretellustoconsteverythingunlessweneedtomodifyit,这是一两年来的传统观念,是的。yetthestandardmakeseverythingmutableuntilwedeclareitconst

c++ - 为什么 `const int& k = i;++i; ` 可能?

这个问题在这里已经有了答案:Whycanconstint&bindtoanint?(8个回答)Aconst&referstoanonvolatilevariable.Thevariablechanges.Doesthechangeinvalidatetheconst&?(4个回答)关闭3年前。我应该确定这个函数在语法上是否正确:intf3(inti,intj){constint&k=i;++i;返回k;}我已经对其进行了测试,它可以与我的main函数一起编译。我不明白为什么会这样。当然,通过调用函数f3我在新的内存空间中创建变量i和j的拷贝并设置constint&k=i我将新创建的k的

c++ - 杀死魔数(Magic Number): "const int" vs "constexpr int" (or is there no difference in the end)

假设我有一个魔数(MagicNumber)我想摆脱...//whatever.cppfor(inti=0;i我可以通过两种方式杀死它:无论是constintSOMETHING_SOMETHING_MEANING_OF_LIFE=42或使用constexprintSOMETHING_SOMETHING_MEANING_OF_LIFE=42在源.cpp文件中。在这种情况下,两者之间是否有任何有意义的区别(我记得编译器推断-在任何一种情况下-值都不会改变,因此42实际上在结果循环中是硬编码的/展开循环/任何机器代码)还是归结为个人喜好?在一个相关问题中:如果magicnumber(以及替换它

c++ - 这个头文件是什么意思(virtual const char* what() const throw())?

classmyexception:publicexception{virtualconstchar*what()constthrow(){return"Myexceptionhappened";}};抱歉,这个问题可能听起来很愚蠢,但我无法解析标题。有人可以用英语描述标题的实际含义吗?首先让我觉得奇怪的是关键字virtual。myexception类不是基类,它继承自已经实现的exception类,那么为什么在这里使用virtual呢?我猜const是用于返回类型,它是一个c风格的字符串,它是const,而另一个const是为了确保这个对象不能被修改(有人能告诉我那个物体可能是什么吗?