草庐IT

GLIBCXX_PERMIT_BACKWARD_HASH

全部标签

c++ - std::hash 对于不同编译版本和不同机器的相同输入是否给出相同的结果?

我有一些随机测试参数,我需要为其计算哈希值以检测我是否使用相同的参数运行。我可能会使用在不同时间重新编译的相同源代码运行测试,或者在不同的机器上运行。即便如此,我还是想检测运行时是否使用了相同的参数。对于不同的编译版本和不同的机器,std::hash是否为相同的输入给出相同的结果?例如std::hash{}("TestcaseParamVal0.7Param0.4");这将始终是一个唯一的数字吗? 最佳答案 不,std::hash不保证结果在不同的计算机、构建甚至同一计算机上执行相同的构建时都是相同的。您唯一的保证是在一次执行期间,

c++ - copy_backward 和 reverse_copy 之间的区别?

我正在阅读C++primer,看到这两个函数似乎具有相同的功能。谁能帮忙告诉我这两者有什么区别?谢谢。 最佳答案 reverse_copy实际上是将元素倒序放置。12345->54321copy_backward只是向后复制元素,但保留它们的相对顺序。123455先复制,但放在最后一个位置。所以你的输出仍然是:12345http://en.cppreference.com/w/cpp/algorithm/copy_backwardCopiestheelementsfromtherange,definedby[first,last),

c++ - 如何 std::hash 一个无序的 std::pair

我希望能够使用std::pair作为unordered_container中的键。我知道我可以通过以下方式做到这一点:templatevoidhash_combine(std::size_t&seed,Tconst&key){std::hashhasher;seed^=hasher(key)+0x9e3779b9+(seed>2);}namespacestd{templatestructhash>{std::size_toperator()(std::pairconst&p)const{std::size_tseed(0);::hash_combine(seed,p.first);::

c++ - _GLIBCXX_VISIBILITY 是什么?

我正在浏览gcc中包含的一些标准header的源代码(在/usr/include/c++/中)并在每个header的顶部找到以下内容:namespacestd_GLIBCXX_VISIBILITY(default)_GLIBCXX_VISIBILITY(默认)到底是什么? 最佳答案 这是一个预处理器宏。并定义为:#if_GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY#define_GLIBCXX_VISIBILITY(V)__attribute__((__visibility__(#V)))#else#defin

c++ - libstdc++ GLIBCXX 版本错误

当我在我的计算机上使用g++编译一个c++程序并将可执行文件传输到我的大学服务器上运行它时,我得到了./main:/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.9'notfound(requiredby./main)./main:/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.14'notfound(requiredby./main)./main:/usr/lib/libstdc++.so.6:version`GLIBCXX_3.4.11'notfound(requiredby./main)程序在我的电脑

c++ - 如何创建具有 64 位输出的良好 hash_combine(受 boost::hash_combine 启发)

目前Boost有hash_combine函数输出32位无符号整数(准确的说是size_t)。一些引用:http://www.boost.org/doc/libs/1_43_0/doc/html/hash/reference.html#boost.hash_combinehttp://www.boost.org/doc/libs/1_43_0/doc/html/hash/combine.htmlMagicnumberinboost::hash_combine我想探索如何创建64位版本的hash_combine。第一件事是在64位中获得黄金比例或任何其他无理数。第二部分是使用轮类。这部分相

c++ - std::hash 特化使用 sfinae?

作为练习,我试图看看我是否可以使用SFINAE为std::pair和std::创建一个std::hash特化:tuple当它的所有模板参数都是无符号类型时。我对它们有一点经验,但据我了解,散列函数需要已经使用typenameEnabled=void进行模板化,以便我添加特化。我不太确定从这里去哪里。这是一个不起作用的尝试。#include#include#include#includenamespacestd{templatestructhash,std::enable_if_t::value>>{size_toperator()(conststd::pair&x)const{retu

c++ - std::hash 模板偏特化

我用模板写了一些类:template>classmy_list;我应该为这个类编写::std::hash特化。我怎样才能做到这一点?简单的偏特化:namespacestd{templateclasshash>{public:size_toperator()(constmy_list&x)const{return...;}};}但是我不能写简单的偏特化,因为它被C++ISO禁止:ISO/IEC14882Thirdedition2011-09-0117.6.4.2.1Namespacestd[namespace.std]2ThebehaviorofaC++programisundefine

c++ - 为什么 std::hash 不专用于 std::reference_wrapper?

我以为会是这样,但我在我的标准库实现(gcc-4.8.2)中找不到它。为什么std::hash还没有专门用于std::reference_wrapper?#pragmaonce#includenamespacestd{templatestructhash>{size_toperator()(constreference_wrapper&r)const{returnstd::hash()(r.get());}};} 最佳答案 std::reference_wrapper主要用于在默认复制值的实用程序中提供引用语义,例如std::bin

c++ - 在哪里可以找到有关 D_GLIBCXX_DEBUG 和 DNDEBUG 标志的更多信息?

我正在尝试了解D_GLIBCXX_DEBUG和DNDEBUG标志。但是我找不到关于它们的信息。谁能解释一下他们在做什么?我在哪里可以阅读更多关于它们的信息? 最佳答案 两者都使用-D它定义了D之后的宏。定义NDEBUG时,assert不检查它的参数。当_GLIBCXX_DEBUG被定义时,它激活debugmode在libstdc++中(使libstdc++对各种操作执行检查)。 关于c++-在哪里可以找到有关D_GLIBCXX_DEBUG和DNDEBUG标志的更多信息?,我们在Stack