草庐IT

LOAD_CONST

全部标签

c++ - const 函数中的成员分配

我有一个类成员myMember,它是一个myType指针。我想在声明为const的函数中分配此成员。我正在做如下:voidfunc()const{...const_cast(myMember)=newmyType();...}这样做在VC++中工作正常,但GCC会给出错误消息“左值需要作为赋值的左操作数”。使成员可变允许我简单地删除const_cast并分配值。但是,我不完全确定这会带来其他副作用。我可以在不必使成员可变的情况下分配我的成员吗?如何?使成员可变有任何副作用吗? 最佳答案 这种情况——封装的内部状态变化不会影响外部状态

c++ - 通过 const ref 传递整数类型有什么好处

问题:通过const引用而不是简单地通过值传递整数类型是否有好处。即。voidfoo(constint&n);//case#1对比voidfoo(intn);//case#2对于用户定义的类型,答案很明确,案例#1避免了不必要的复制,同时确保了对象的常量性。但是在上面的例子中,引用和整数(至少在我的系统上)是相同的大小,所以我无法想象函数调用需要多长时间(由于复制)。但是,我的问题确实与内联函数的编译器有关:对于非常小的内联函数,编译器是否必须在情况#2中复制整数?通过让编译器知道我们不会更改引用,它可以内联函数调用而无需不必要地复制整数吗?欢迎提出任何建议。

c++ - const关键字在c中是如何工作的

我想了解c和c++中的const内部结构。编译器如何强加恒定性?有人可以帮帮我吗? 最佳答案 一般来说,const是100%的编译器。当您声明某些内容为const时,编译器会对允许您编写的内容施加限制。它不会让您分配给const标量,通过const引用或指针分配,或调用const对象的非const函数。不保证编译器会安排任何类型的运行时保护。 关于c++-const关键字在c中是如何工作的,我们在StackOverflow上找到一个类似的问题: https:/

C++ "error: passing ' const std::map<int, std::basic_string<char>>' as ' this' argument of ..."

使用以下代码(为简洁起见摘录):颜色.h:classcolor{public:color();enumcolorType{black,blue,green,cyan,red,magenta,brown,lightgray,nocolor};colorTypegetColorType();voidsetColorType(colorTypecColortype);stringgetColorText()const;private:colorTypecColortype=nocolor;mapcolors={{black,"black"},{blue,"blue"},{green,"gre

c++ - 有没有办法使用独立的 `std::begin` 和 const_iterator?

我喜欢一致性。我最近问了使用std::begin的问题与例如std::vector::begin,并且一致的决定似乎是使用前者,因为它更通用。但我想我在泥泞中找到了一根棍子。有时,您想传达在循环遍历容器时不会更改容器,因此调用std::vector::cbegin.如果您有时这样做会使您的代码非常不对称iter=v.cbegin()其他时候做了iter=begin(v).有没有办法解决这种不对称的问题,您是否仍会推荐std::begin鉴于这些知识?为什么C++没有std::cbegin? 最佳答案 C++14有cbegin/cen

c++ - 是否可以在 "const"函数中更改成员变量的值?

常量变量的值可以通过指针技巧改变,但是否可以这样做:classA(){intx;public:voidfunc()const{//changevalueofxhere}} 最佳答案 声明x可变classA(){mutableintx;public:voidfunc()const{//changevalueofxhere}}; 关于c++-是否可以在"const"函数中更改成员变量的值?,我们在StackOverflow上找到一个类似的问题: https://s

c++ - 返回 const 引用是否更有效

例如其中最好的是:std::stringf(){}或conststd::string&f(){} 最佳答案 函数不应返回对局部对象/变量的引用,因为此类对象超出范围并在函数返回时被销毁。不同的是,函数可以返回一个对象的常量或非常量引用,其范围不受函数上下文的限制。典型的例子是自定义operator:std::ostream&operator不幸的是,按值返回有其性能缺陷。正如Chris提到的,按值返回对象涉及临时对象的拷贝及其后续销毁。复制通过复制构造函数或operator=进行。.为了避免这些低效率,智能编译器可能会应用RVO或N

c++ - 自动生成成员函数的 const 重载

我正在尝试在C++中实现D语言关键字inout的语义(只是为了好玩)。根据上下文,它基本上表示以下两种情况之一:“此函数的结果将与其参数之一具有相同的常量性。”“此成员函数的结果将与您调用它的实例具有相同的常量性。”在编写诸如begin和end等成员函数时非常有用。我能够相对轻松地创建第一种情况的有效实现(尽管界面确实不漂亮):http://ideone.com/wgaDJJ然而,根据我的最佳猜测,第二个似乎是不可能的。你只能在使用模板时获得这种“自动const重载生成”,但据我所知,你不能在“this”参数上进行模板化。特别是,您会注意到此代码不工作/编译:http://ideone

C++ 使用指向非 const 的指针编写 const vector

我正在编写一个CustomVector类,使用标准vector在内部存储数据:templateclassCustomVector{friendclassCustomVector_ref;public:...private:std::vector_data;};然后,为了从CustomVector中提取子vector,我使用了一个类来存储指向每个数据元素的指针:templateclassCustomVector_ref{public://ReturnsthevaluestoredinCustomVector//andpointed-toby_data_refT&operator[](si

c++ - 通过 const_cast 修改 const std::vector<T> 的元素

下面的程序是否有未定义的行为?#include#includestructFoo{conststd::vectorx;};intmain(){std::vectorv={1,2,3};autof=newFoo{v};const_cast(f->x[1])=42;//Legal?std::coutx[1]请注意,它不是使用const_cast从f->x中剥离常量,而是从f->中剥离常量x[x],大概由一个单独的数组表示。或者是否允许翻译假定f->x[1]在创建后是不可变的? 最佳答案 您的示例中没有未定义的行为。上面的代码不会调用未定