草庐IT

统一性

全部标签

c++ - boost::uuids::random_generator 和多线程的唯一性

当我用单线程生成随机数时,在4Muuid中没有生成重复项,但如果我用两个线程生成每个1M,我看到大约16-20个重复项。可能是什么原因?classTestUuid{public:std::stringGenerateUUid(){boost::uuids::uuiduid;{boost::mutex::scoped_lock(m_mRandomGen);uid=m_oRandomGen();}std::stringstreamss;ss&mUids,unsignedcount){for(unsignedi=0;i::const_iteratorit=mUids.find(sUid);i

c++ - 在统一的内联初始化中使用不可复制的值初始化静态 std::map

我想初始化一个静态的std::map,其中的值是不可复制的。我将我的类(class)称为ValueClass。ValueClass有一个std::unique_ptr作为私有(private)成员,我什至通过扩展如下所示的non_copyable来确保ValueClass不可复制:classnon_copyable{public:non_copyable()=default;protected:virtual~non_copyable()=default;private:non_copyable(constnon_copyable&)=delete;non_copyable&opera

c++ - 选择具有唯一性并保持插入顺序的 STL 容器

在以下情况下我无法决定使用哪个STL容器:我想保留元素的插入顺序容器中的元素必须是唯一的。有现成的容器吗?我不想使用vector,然后在每次执行push_back之前执行std::find。 最佳答案 BoostMultiIndex应该能够做你想做的事-你可以只使用一个序列索引来获得“按插入顺序排序”的要求,以及hashed_unique或ordered_unique索引得到唯一性要求。 关于c++-选择具有唯一性并保持插入顺序的STL容器,我们在StackOverflow上找到一个类似

c++ - 为什么统一初始化语法只适用于对象?

在c++11中,我们有很好的对象统一初始化语法。为什么它不扩展到也初始化非对象类型?这是否存在任何句法歧义,还是我问的只是一些愚蠢的问题?例子:structs{intk;};ss1{1};//ok(objectinitialization)sconst&s3{3};//ok(objectinitialization)s&s2{s1};//error(referenceinitialization)一个更有用的例子:structt{t(tconst&x):k(x.k){}intk;};structc{c(t&x1,t&x2):s1_{x1}//error(referenceinitial

c++ - 统一类型和非类型模板参数

我有一个类型特征,用于检查给定类型是否是给定类模板的实例:templateclassC,typenameT>structcheck_is_instance_of:std::false_type{};templateclassC,typename...Ts>structcheck_is_instance_of>:std::true_type{};templateclassC,typenameT>structis_instance_of:check_is_instance_of>{};不幸的是,这对非类型模板参数不起作用,因为它们不会被可变模板参数“捕获”,所以is_instance_of

c++ - 当对象没有数据成员时,统一初始化复制失败

在更新一些代码以使用统一初始化时,我认为这将是现在“旧式”括号样式的现代替代品。我知道情况并非总是如此(明显的例子,vector)但我偶然发现了另一个我不明白的区别。classObject{public:Object()=default;Object(constObject&)=default;};intmain(){Objecto;Objectcopy{o};//errorObjectcopy2(o);//OK}在clang3.5下编译失败,报错:(在gcc下也失败)error:excesselementsinstructinitializerObject有两个不同的变化使这项工作。

C++ - 带有 std::string 的统一初始值设定项

我正在尝试使用C++字符串类的统一初始化器。下面是代码:#include#includeusingnamespacestd;intmain(){stringstr1{"aaaaa"};stringstr2{5,'a'};stringstr3(5,'a');cout输出将是:str1:aaaaastr2:astr3:aaaaa这让我挠了挠头。为什么str2无法达到str3的预期效果? 最佳答案 std::string有一个采用initializer_list参数的构造函数。basic_string(std::initializer_l

c++ - std::type_info::hash_code() 的唯一性和 "should"的含义

是否意味着要保证相同的std::type_info::hash_code()值表示相同的类型?Cplusplus.com似乎是这么说的:Thisfunctionreturnsthesamevalueforanytwotype_infoobjectsthatcompareequal,anddifferentvaluesfordistincttypesthatdonot.[Emphasismine]Cppreference似乎另有说法:Returnsanunspecifiedvalue,whichisidenticalforobjects,referringtothesametype.No

c++ - 统一初始化语法区别

做和做有什么区别Aa{A()};和,Aa(A{});避免MostVexingParse?我什么时候应该使用特定的? 最佳答案 这两种语法在大多数情况下是等价的,选择哪一种主要是个人喜好问题。如果您正在进行统一初始化,我建议您这样做:Aa{A{}};否则,可以单独使用括号来消除歧义:Aa((A()));//Thiscan'tbeparsedasafunctiondeclaration请注意,在一种情况下(我必须说这种可能性很小)您问题中显示的两种形式并不相同。如果您的类A有一个采用initializer_list的构造函数,那么在使用

c++ - 统一指针、值和智能指针的 C++ 模板

我的真实例子很大,所以我会使用一个简化的例子。假设我有一个矩形的数据类型:structRectangle{intwidth;intheight;intcomputeArea(){returnwidth*height;}}还有另一种使用该类型的类型,例如:structTwoRectangles{Rectanglea;Rectangleb;intcomputeArea(){//Ignorecasewheretheyoverlapforthesakeofargument!returna.computeArea()+b.computeArea();}};现在,我不想对TwoRectangles