草庐IT

add_const

全部标签

c++ - 在具有 const/nonconst 版本的 C++ 模板类上重载 [] 运算符

哇,好长的标题。这是我的问题。我在C++中有一个模板类,我正在重载[]运算符。我有一个const和一个非常量版本,非常量版本通过引用返回,这样类中的项目就可以这样更改:myobject[1]=myvalue;这一切都有效,直到我使用bool值作为模板参数。这是显示错误的完整示例:#include#includeusingnamespacestd;templateclassMyClass{private:vector_items;public:voidadd(Titem){_items.push_back(item);}constToperator[](intidx)const{retu

c++ - 编译器是否不允许假定 const-ref 参数将保持常量?

例如:https://godbolt.org/g/5eUkrxvoidf(constint&);voidg1(){constinti=42;if(i==42)f(i);if(i==42)f(i);}voidg2(){inti=42;if(i==42)f(i);if(i==42)f(i);}似乎“f”改变其参数应该是UB,因此应该允许编译器假定它不会发生并相应地进行优化。然而这两个函数会产生不同的装配。我没有标准的拷贝。这不是保证吗? 最佳答案 根据标准,在C++中将一个指向常量的指针转换为指向非常量的指针,然后修改它(尽管这很困惑)

c++ - 为什么这个const成员函数允许修改一个成员变量呢?

classString{private:char*rep;public:String(constchar*);voidtoUpper()const;};String::String(constchar*s){rep=newchar[strlen(s)+1];strcpy(rep,s);}voidString::toUpper()const{for(inti=0;rep[i];i++)rep[i]=toupper(rep[i]);}intmain(){constStringlower("lower");lower.toUpper();cout 最佳答案

c++ - 如何将 "invalid operands of types ' const char' 修复为二进制 'operator+'?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIconcatenatemultipleC++stringsononeline?根据thisC++std::string使用operator+连接。那么为什么这段代码usingnamespacestd;stringsql="createtablem_table("+"pathTEXT,"+"qualityREAL,"+"foundINTEGER);";导致这个错误?invalidoperandsoftypes'constchar[22]'and'constchar[17]'tobinary'oper

c++ - CMake add_executable 目标名称已保留

我有以下CMakeLists.txt文件:CMAKE_MINIMUM_REQUIRED(VERSION3.1)PROJECT(MyProject)FILE(GLOB_RECURSEsourcesRELATIVE${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)FILE(GLOB_RECURSEheadersRELATIVE${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_CURRENT_SOURCE_DIR}/src/*.h)ADD_EXECUTABLE(AnyNameHere,${so

c++ - 私有(private)成员 : Static const vs. 只是 const

当一个对象具有一些不会改变并且在其整个功能中都需要的特征时,我正在尝试确定最佳选择。静态常量成员Const成员在我看来,静态成员的真正原因是拥有一个可以更改的变量,从而影响同一类的所有其他对象。但是,有人建议将类“不变量”作为静态常量成员。我正在寻找有关建立类常量的推荐方法及其原因的一些见解。 最佳答案 “不会改变”不够准确。这里的主要问题是类的不同对象是否需要具有这些const成员的不同值(即使它们在对象的生命周期内没有改变)或者所有对象都应该使用(共享)相同的值。如果类的所有对象的值都相同,那么当然应该是类的staticcons

c++ - 为什么我不能将 const 映射结构传递给 C++ 中的函数?

我尝试将const与vector一起工作:例如:voiddamn(constvector&bb){for(inti=0;i但是当尝试使用map时,它不会:voidpas(constmap&mm){cout我想知道为什么没有。 最佳答案 map::operator[]有点奇怪。它这样做:寻找key。如果找到,归还。如果不是,则插入并默认构造其关联值。然后返回对新值的引用。第3步与constness不兼容。该语言没有两个功能不同的operator[]重载,而是强制您对const对象使用map::find。或者,有人可能会争辩说,如果参数

c++ - 将子字符串从 const char* 复制到 std::string

是否有任何可用的复制函数允许子字符串到std::string?例子-constchar*c="Thisisateststringmessage";我想将子字符串“test”复制到std::string。 最佳答案 您可以使用std::stringiteratorconstructor用C字符串的子字符串初始化它,例如:constchar*sourceString="Helloworld!";std::stringtestString(sourceString+1,sourceString+4);

c++ - 什么时候成员函数应该同时是 const 和 volatile?

我在阅读有关volatile成员函数的内容时发现成员函数可以同时是const和volatile的断言。我没有真正使用过这样的东西。任何人都可以分享他们在将成员函数同时用作const和volatile的实际使用方面的经验。我写了小类来测试同样的:classTemp{public:Temp(intx):X(x){}intgetX()constvolatile{returnX;}intgetBiggerX(){returnX+10;}private:intX;};voidtest(constvolatileTemp&aTemp){intx=aTemp.getX();}intmain(inta

c++ - STL 容器赋值和 const 指针

编译:int*p1;constint*p2;p2=p1;这不是:vectorv1;vectorv2;v2=v1;//Error!v2=static_cast>(v1);//Error!嵌套const指针的类型等价规则是什么?我认为转换是隐式的。此外,我宁愿不实现STL容器的逐点分配,除非我真的必须这样做。 最佳答案 直接赋值是不可能的。正如其他人所解释的那样,等价性不是由指针类型建立的,而是由容器类型建立的。在这种情况下,vector不想接受另一个具有不同但兼容的元素类型的vector。没有真正的问题,因为您可以使用assign成员