草庐IT

const_buffers

全部标签

c++ - "const T &arg"与 "T arg"

以下哪个示例是声明以下函数的更好方法,为什么?voidmyFunction(constint&myArgument);或voidmyFunction(intmyArgument); 最佳答案 使用constT&arg如果sizeof(T)>sizeof(void*)并使用Targ如果sizeof(T) 关于c++-"constT&arg"与"Targ",我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 为什么 as_const 禁止右值参数?

我想问为什么as_const禁止右值参数,accordingtocppreference.com(即为什么标准人员这样做,而不是为什么cppreference.com专门引用它们。而且也不是在哪里规范委员会的意图是编纂的,只是为了确保:)))。这个(人工)示例会产生错误(用户希望将其设为const以保持COW安静)QCharc=as_const(getQString())[0];Anotherquestion'sanswer指出,如果我们只是删除右值引用重载的删除,它会默默地将右值转换为左值。对,但为什么不优雅地处理右值,为右值输入返回constrvalues,为左值输入返回const

c++ - 将 const std::unique_ptr 用于 pimpl 习惯用法

在HerbSutter'stalkatCppCon16他建议用conststd::unique_ptr编写pimplidiom(大约10分钟)。这应该如何与移动构造函数/赋值一起使用?c++17中有什么东西吗?我找不到任何东西。 最佳答案 如果您的类应该是永不为空的,那么非常量的唯一ptr(具有默认移动/分配)是不合适的。movector和moveassign都会清空rhs。一个constuniqueptr将禁用这些自动方法,如果你想移动,你必须在impl中编写它(并在外面有点胶水)。我会亲自编写一个具有我想要的语义的值ptr(然后

c++ - 如何在 C++ 中使用 Google 的 Protocol Buffer 添加重复字段?

我有以下ProtocolBuffer。请注意,StockStatic是一个重复字段。messageServiceResponse{enumType{REQUEST_FAILED=1;STOCK_STATIC_SNAPSHOT=2;}messageStockStaticSnapshot{repeatedStockStaticstock_static=1;}requiredTypetype=1;optionalStockStaticSnapshotstock_static_snapshot=2;}messageStockStatic{optionalstringsector=1;optio

c++ - 将 const 函数引用绑定(bind)到 lambda

这段代码int(&foo)(int,int)=[](inta,intb){returna+b;};不编译,因为显然非常量引用不能用临时初始化。我应该把const放在哪里? 最佳答案 如前所述,无捕获lambda可转换为函数指针。因此,如果您想将该静态函数绑定(bind)到引用,则需要取消引用该指针。int(&foo)(int,int)=*[](inta,intb){returna+b;};将*应用于lambda会导致一堆机制启动。由于lambda不会重载operator*,但确实实现了到指针类型的转换,这种转换就会发生。之后*应用于

c++ - C++ 如何处理引用 int 的 const double&?

今天早上我正在编写一些模板代码,我使用BOOST_STATIC_ASSERT来确保我没有创建对错误类型的引用,因为我认为这可能是一个更清晰的错误消息。但是,当我尝试删除静态断言以查看替代编译器错误时,我震惊地发现当您尝试使constdouble&引用int时gcc甚至没有提示:#includeintmain(){intx=5;constdouble&y=x;std::cout编译,甚至不警告:$g++~/stuff/badRef.cpp-Wall-Wextra-pedantic$a.out5这里发生了什么?这是未定义的行为吗?如果是这样,为什么gcc不提示?在我的机器上,int是4个字

c++ 右值引用和 const 限定符

const限定的众多好处之一是使API更易于理解,例如:templateintfunction1(Tconst&in);//clearly,theinputwon’tchangethroughfunction1通过引入右值引用,可以从完美转发中受益,但通常会删除const限定符,例如:templateintfunction2(T&&in);//canexplicitlyforwardtheinputifit'sanrvalue除了文档,还有什么好的方法来描述function2不会改变它的输入吗? 最佳答案 templateintfu

c++ - 二进制 '[' : no operator found which takes a left-hand operand of type 'const std::map<_Kty,_Ty>'

我不知道错误来自哪里。好像我正在将有效数据传递给[]运算符。templatetypenamemap,int>::iteratorGraph::findEdge(constVertexType&v,constVertexType&w)const{map,int>::const_iteratoriter=vertices[v].second.adjList.find(w);returniter;}//endfindEdge错误:errorC2678:binary'[':nooperatorfoundwhichtakesaleft-handoperandoftype'conststd::ma

c++ - 字符串和 const char* 和 .c_str()?

我遇到了一个奇怪的问题,我想知道它为什么会这样。我有一个类,其中有一个返回std::string的成员函数。我的目标是将这个string转换为constchar*,所以我做了以下constchar*c;c=robot.pose_Str().c_str();//isthissafe??????udp_slave.sendData(c);问题是我在大师方面得到了一个奇怪的角色。但是,如果我执行以下操作constchar*c;std::stringdata(robot.pose_Str());c=data.c_str();udp_slave.sendData(c);我得到了我所期望的。我的问

c++ - 我应该如何在 API 中替换 vector<uint8_t>::const_iterator?

我的任务是完善编解码器库的界面。我们使用的是C++17,我只能使用标准库(即没有Boost)。目前,有一个Decoder大致如下所示的类:classDecoder:publicCodec{public:structResult{vector::const_iteratornew_buffer_begin;optionalmetadata;optionalpacket;};Resultdecode(vector::const_iteratorbuffer_begin,vector::const_iteratorbuffer_end);private://irrelevantdetails