草庐IT

Constants

全部标签

c++ - 为什么要在最后放一个 "const"?

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicates:c++constuseinclassmethodsMeaningof“const”lastinaC++methoddeclaration?intoperator==(constAAA&rhs)const;这是一个运算符重载声明。为什么把const放在最后?谢谢 最佳答案 const关键字表示该方法不会更改对象。由于operator==用于比较,因此无需更改任何内容。因此,它是const。对于像operator=这样会修改对象的方法,必须省略它。它让编译器

c++ - "const int& jj"和 "int& const jj"有什么区别?

我对这两个感到困惑。我知道C++引用本质上是常量,一旦设置它们就不能更改为引用其他内容。 最佳答案 constint&表示对constint的引用。(同样,int&表示对非常量int的引用。)int&const字面意思是const引用(对非constint),这在C++中是无效的,因为引用本身不能是const限定的。$8.3.2/1References[dcl.ref]Cv-qualifiedreferencesareill-formedexceptwhenthecv-qualifiersareintroducedthroughth

C++:如何处理需要修改的const对象?

我在代码中有个地方曾经说过constmyType&myVar=someMethod();问题在于:someMethod()返回constmyType我以后需要能够更改myVar,方法是在对象处于无效状态时分配默认值。所以我需要使myVar成为非常量。我想我也需要让myVar成为非引用,对吧?例如。myTypemyVar?执行此常量到非常量的C++“正确”方法是什么?静态转换?词汇表?还有别的吗?我可能可以访问boost的词法转换,所以我不介意这个选项,但我更喜欢非boost解决方案,如果它最终不允许我这样做使用提升。谢谢! 最佳答案

c++ - const 强制转换以允许读取锁定,这闻起来难闻吗?

我想在标记为const的对象上执行只读方法,但为了线程安全地执行此操作,我需要锁定读写器互斥体:constValueObject::list()const{ScopedReadlock(children_);...}但这会中断,因为编译器提示“children_”是const等等。我去了ScopedRead类和RWMutex类(children_是一个子类)以允许read_lock在const对象上,但我必须写这个:inlinevoidread_lock()const{pthread_rwlock_rdlock(const_cast(&rwlock_));}我一直了解到const_ca

c++ - 当字符串超出范围时,将 string::c_str() 分配给 const char*

我对基本的C++用法有疑问。下面的代码使用gcc/LInux编译,打印正确。字符串test超出范围,所以它的c_str()值也应该无效,不是吗?我错了还是我误解了constchar*的意思?#includeintmain(){constchar*a="aaaa";std::cout 最佳答案 你是对的,你的代码无效,因为它使用了一个生命周期已经结束的对象。它是“偶然”起作用的,你不能依赖它。 关于c++-当字符串超出范围时,将string::c_str()分配给constchar*,我们

c++ - 从 const 方法调用成员的非常量方法

我很惊讶地发现“常量”中的这个“洞”:#includeclassA{intr;public:A():r(0){}voidnonconst(){puts("Iaminurnonconstmethod");r++;}};classB{Aa;A*aPtr;public:B(){aPtr=newA();}voidgo()const{//a.nonconst();//illegalaPtr->nonconst();//legal}};intmain(){Bb;b.go();}所以基本上从const方法B::go(),你可以调用non-const成员函数(恰如其分地命名为nonconst())如果

c++函数语法/原型(prototype) - 括号后的数据类型

我非常熟悉C/C++标准函数声明。我最近看到这样的事情:intmyfunction(charparameter)const以上只是一个假设的例子,我什至不知道它是否有意义。我指的是参数之后的部分。常数。这是什么?一个更真实的例子:wxGridCellCoordsArrayGetSelectedCells()const这个可以查到here那么行尾的文本const到底在做什么? 最佳答案 const表示该函数不会更改this的任何数据成员,除非它们被标记为可变。只有成员函数可以标记为const,这意味着函数内部不会更改任何成员。

C++ 表达式必须有常量值

#include#include#includeusingnamespacestd;templatevoidsort(intn,Ta[]){for(i=0;ia[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}}voidmain(){intsize;cout>size;intAmta[size];for(inti=0;i>Amta[i];}Sleep(100000);}我正在尝试从用户那里获取用户想要输入的数字数量并将其存储在可变大小中。但是当我初始化arrayAmta[size]时,我得到以下编译错误:Expressionmusthaveconstantva

c++ - 非静态常量数据成员有什么意义?

这个问题在这里已经有了答案:Whenisanon-staticconstdatamembermoreusefulthanaconststaticone?(2个答案)关闭7年前。对于下面的代码:classA{public:constintcx=5;};在这里,将为A的每个对象创建一个cx的实例。这对我来说似乎是一种浪费,因为cx永远无法修改。实际上,我看不出编译器为什么不强制将const数据成员设为静态的任何理由。谁能给我解释一下吗?

c++ - 这个 C++ const 引用访问器接口(interface)习惯用法有什么问题吗?

我正在将一个结构体转换为一个类,这样我就可以为我的变量强制执行一个setter接口(interface)。不过,我不想更改所有读取变量的实例。所以我转换了这个:structfoo_t{intx;floaty;};为此:classfoo_t{int_x;float_y;public:foot_t():x(_x),y(_y){set(0,0.0);}constint&x;constfloat&y;set(intx,floaty){_x=x;_y=y;}};我对此很感兴趣,因为它似乎模拟了C#的公共(public)只读属性的想法。编译正常,我还没有发现任何问题。除了在构造函数中关联const