草庐IT

const_buffers

全部标签

涵盖 const 和非 const 方法的 C++ 模板

我遇到了const和非const版本的相同代码重复问题。我可以用一些代码来说明问题。这里有两个示例访问者,一个修改访问对象,一个不修改。structVisitorRead{templatevoidoperator()(T&t){std::cin>>t;}};structVisitorWrite{templatevoidoperator()(constT&t){std::cout现在这里是一个聚合对象——它只有两个数据成员,但我的实际代码要复杂得多:structAggregate{inti;doubled;templatevoidoperator()(Visitor&v){v(i);v(

自己的容器类的 C++ 迭代器和 const_iterator 问题

我正在编写一个自己的容器类,但遇到了一个我无法理解的问题。这是显示问题的简单示例。它由一个容器类和两个测试类组成:一个使用std:vector的测试类可以很好地编译,第二个测试类尝试以完全相同的方式使用我自己的容器类,但编译失败。#include#include#includeusingnamespacestd;templateclassMyContainer{public:classiterator{public:typedefiteratorself_type;inlineiterator(){}};classconst_iterator{public:typedefconst_i

c++ - "const"在 C 和 C++ 中有何不同?

变量的const限定在C和C++中有何不同?来自:Does"const"justmeanread-onlyorsomethingmore?“引发这个问题的原因是这个答案:https://stackoverflow.com/questions/4024318#4024417他声明const“just”在C中表示只读。我认为这就是const的全部含义,无论它是C还是C++。他是什么意思?" 最佳答案 C中的const不能用于构建常量表达式。例如:#includeintmain(){inti=2;constintC=2;switch(i)

c++ - cppcheck 在 const std::string[] 上抛出警告

我正在努力处理cppcheck(Linux机器上的1.85版)正在报告的警告:someFile.h:23:29:warning:Redundantcode:Foundastatementthatbeginswithstringconstant.[constStatement]conststd::stringOffOn[]={"off","on"};^我做了一些研究,发现将语句更改为conststd::stringOffOn[]={std::string("off"),std::string("on")};删除警告。但是我不明白发生了什么,以及我的第一个解决方案有什么“坏处”。也许有人可

c++ - "static const int"导致链接错误( undefined reference )

使用以下代码时,我对链接器错误感到困惑://static_const.cpp--completecode#includestructElem{staticconstintvalue=0;};intmain(intargc,char*argv[]){std::vectorv(1);std::vector::iteratorit;it=v.begin();returnit->value;}但是,这在链接时会失败——不知何故,它需要一个符号来表示静态const“值”。$g++static_const.cpp/tmp/ccZTyfe7.o:Infunction`main':static_con

C++ 临时对象绑定(bind)到参数和返回值 const 引用

即使查看了有关SO的相关问题并阅读了C++03标准第192页(http://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c++2003std.pdf),我也无法清楚地知道这是否合法。这是否合法且安全:constMyClass&f(constMyClass&arg){returnarg;}voidsome_other_function(){constMyClass&reference=f(MyClass());//Usereference.}在我看来是这样的。 最佳答案 据

c++ - 有时为 const 的成员函数

我有一个类似于以下的类设计:classMyClass{public:boolIsValid()const;voidMakeValid();private:boolCheckValidity(boolfix);};boolMyClass::IsValid()const{//Checkvalidity,butdon'tfixanyproblemsfound.Doesn'twork.returnCheckValidity(false);}voidMyClass::MakeValid(){//Checkvalidityandfixproblemsfound.CheckValidity(true

c++ - const_iterator 和 const_iterator::value_type 的 constness

为什么在STL中std::iterator_traits::value_type与类型相同std::iterator_traits::value_type为什么要这样设计?第一个不应该是constT,第二个不应该是T吗?您应该如何采用迭代器的底层const正确类型?我知道您可以编写自己的模板类和特化并从中获取它std::iterator_traits::pointer但是不应该有一个成员typedef来保存它吗? 最佳答案 常量对于值类型无关紧要,因为值意味着一个拷贝。std::iterator_traits::reference是

c++ - const 成员函数和非常量成员函数有什么区别?

我对const版本和非常量版本的成员函数很困惑,如下所示:value_type&top(){returnthis.item}constvalue_type&top()const{returnthis.item}这两个函数有什么区别?会在什么情况下使用? 最佳答案 简而言之,它们用于为您的程序添加“常量正确性”。value_type&top(){returnthis.item}这用于提供对item的可变访问。它用于修改容器中的元素。例如:c.top().set_property(5);//OK-setsapropertyof'item

c++ - const 和非常量函数的重载是如何工作的?

STL充满了这样的定义:iteratorbegin();const_iteratorbegin()const;由于返回值不参与重载决议,这里唯一的区别是函数是const。这是重载机制的一部分吗?编译器的解析算法是什么:vector::const_iteratorit=myvector.begin(); 最佳答案 在你给出的例子中:vector::const_iteratorit=myvector.begin();如果myvector不是const,则将调用begin()的非const版本,您将依赖从迭代器到const_iterato