草庐IT

value_variable

全部标签

c++ - 按值(value)返回总是常量吗?

此代码无法编译:classC{};voidfoo(C&c){}Cbar(){returnC();}intmain(){foo(bar());}foo(bar())行中的编译错误(GCC4.1.2):invalidinitializationofnon-constreferenceoftype'C&'fromatemporaryoftype'C'由于bar()返回一个mutable对象,它应该编译...为什么C++不允许上述代码?编辑:我在ananswerbelow中做了总结所有答案的所有好主意;-) 最佳答案 此处适用的规则是您不能

c++ - std::vector 应该尊重 alignof(value_type) 吗?

如果我定义一个具有特定对齐要求的简单类型,该类型的std::vector难道不应该为每个元素遵守对齐吗?考虑下面的例子typedefstd::arrayalignas(32)avx_point;std::vectorx(10);assert(!(std::ptrdiff_t(&(x[0]))&31)&&//assertthatx[0]is32-bytealigned!(std::ptrdiff_t(&(x[1]))&31));//assertthatx[1]is32-bytealigned我发现clang3.2(带或不带-stdlib=libc++)悄悄地(没有任何警告)违反了对齐要求

c++ - boost multi_index : retrieve unique values of a non-unique key

我有一个boost::multi_index_container其元素是这样的结构:structElem{Aa;Bb;Cc;};主键(在数据库意义上)是a和b的composite_key。其他键的存在是为了执行各种类型的查询。我现在需要检索一组c的所有不同值。这些值是无论如何不是唯一的,而是遍历所有条目(尽管是有序的),或者使用std::unique似乎很浪费,考虑到c的不同值的数量预计将我是否缺少更有效地获得此结果的简单方法? 最佳答案 我搜索了Boost.MultiIndex文档,但似乎无法找到一种方法来执行您想要的操作。我很想

c# - Windows 手机 8.1 : C# Callback with IList variable fails to cast to IVector

我有一个声明回调接口(interface)的C#windowsphone8.1VisualStudio(2013)项目publicinterfaceICallBack{//////TheChildCallbackmustoverridethismethodandthiswillbefiredwhentimecomes//////Theresultantfiles///ErrorcodevoidGotFileList(FileTypetype,IListfiles,ErrorCodecode);}我有一个按如下方式实现它的C++/CX包装器:refclassCallbackImplsea

c++ - 支持多态的Stored-by-Value Pool,如何使用智能指针?

介绍我有一个数据结构:值池。(不是指针池)当我调用create()时,它会返回Handle。到目前为止一切都很好。templateclassPool{std::vectorv;//storebyvalueHandlecreate(){....}}templateclassHandle{Pool*pool_;//pointerbacktocontainerintpool_index_;//whereIaminthecontainerT*operator->(){returnpool_->v.at(pool_index_);//i.e."pool[index]"}voiddestroy()

c++ - 具有复杂值类型 : confusion with value_type and reference 的迭代器

我想创建一个自定义迭代器包装器,例如enumerate:给定一对类型为T的迭代器,它会返回一个类型为std::pair的可迭代对象,其中该对的第一个元素将取值0、1、2,依此类推。我无法确定应该是什么value_type和reference我的迭代器。我想支持两种行为:首先,引用底层序列的值:for(auto&kv:enumerate(my_vec)){kv.second=kv.first;}(类似于std::iota);其次,复制值:std::vectora{10,20,30};autocopy=*enumerate(a).begin();a[0]=15;std::cout我很困惑I

c++ - C++ 中的继承 : define variables in parent-child classes

问题我正在寻找在父子类中定义变量的最佳方法,以便通过指向其父类的指针进行调用。这是协议(protocol):classBase{public:virtualvoidfunction()=0;};classA:publicBase{public:inta,b;A(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};classB:publicBase{public:inta,b;B(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};Base*elemen

c++ - 通过索引运算符插入到 boost::program_options::variables_map

我有一个boost::program_options::variables_map参数。现在我想像键值对一样手动插入到这个map中。示例:boost::program_options::variables_mapargsargs["document"]="A";args["flag"]=true;问题是我已经有了这两个选项desc.add_options()("document",po::value())("flag",po::value());但有时他们从命令行得到空输入。所以如果它们是空的,那么我必须在po::variables_mapargs本身中更新它们

C++ : subtracting unsigned values is unsigned

这个问题在这里已经有了答案:IssubtractinglargerunsignedvaluefromsmallerinC++undefinedbehaviour?(2个答案)关闭3年前。在C++中,编译器提醒我减去无符号值是无符号的,因此调用abs()是没有意义的:uint64_ta,b;if(std::abs(a-b)>10){std::cout好的,我知道减法就是加法,而且我知道在我的实例中数字将小于2^63,所以我将static_cast转换为int64_t。但是调用abs的目的是为了避免写if(a-b>10||b-a>10){std::cout有没有更惯用的方法来做到这一点?

c++ - 具有不完整 Value 参数的 Boost.Iterator Facade

我正在尝试将boost::iterator_facade与不完整的Value一起使用模板参数。这失败了,因为iterator_facade正试图检查类型is_pod。这是预期的行为吗?我可以解决这个限制吗某种方式?我可以编写一个简单地代理foo和为它提供隐式转换,但我宁愿有一个更简单的解决方案。#includeclassiter:publicboost::iterator_facade{private:friendclassboost::iterator_core_access;voidincrement(){}boolequal(iterconst&other)const{retur