草庐IT

STD_PROP_LIST

全部标签

c++ - Clang、std::next、libstdc++ 和 constexpr-ness

采用以下代码:#includeconstexprstd::arraya{};static_assert(std::next(std::begin(a))==std::begin(a)+1);使用-std=c++17GCC可以完美地编译它,但Clang会提示该表达式不是整型常量表达式。看起来问题出在std::next上,但是在C++17中应该是constexpr。尽管如此,std::next在std库中,而不是在编译器本身中,因此发生了一些奇怪的事情。为了让事情变得更好,如果您将-stdlib=libc++传递给Clang,该示例将完美编译。这是怎么回事?谁对谁错?编辑这个问题似乎与cl

c++ - 将参数传递给 std::thread 的区别,C++

引自NikolaiJosuttis-StandardLibraryC++11:Detachedthreadscaneasilybecomeaproblemiftheyusenonlocalresources.Theproblemisthatyoulosecontrolofadetachedthreadandhavenoeasywaytofindoutwhetherandhowlongitruns.Thus,makesurethatadetachedthreaddoesnotaccessanyobjectsaftertheirlifetimehasended.Forthisreason,

c++ - std::strong_ordering 和 std::weak_ordering 的实际意义

我一直在阅读一些关于C++20的consistentcomparison(即operator)但无法理解std::strong_ordering之间的实际区别是什么和std::weak_ordering(对于这种方式的_equality版本也是如此)。除了对类型的可替代性进行非常详细的描述之外,它是否真的会影响生成的代码?它是否对如何使用该类型添加了任何限制?很想看到一个真实的例子来证明这一点。 最佳答案 Doesitaddanyconstraintsforhowonecouldusethetype?一个非常重要的约束(原始论文并非

c++ - libc++ 的 std::map/set::equal_range 实现给出了意想不到的结果

我注意到clang的libc++中的std::set::equal_range(与std::map相同)给出与libstdc++不同的结果。我一直认为equal_range应该返回等效于std::make_pair(set.lower_bound(key),set.upper_bound(key)),这是cppreference所说的和libstdc++所做的。然而,在libc++中,我有一个代码给出了不同的结果。#include#include#includestructcomparator{usingrange_t=std::pair;usingis_transparent=std

c++ - 如何迭代 std::variant 的类型?

我有一些变体usingV=std::variant和一个带有原型(prototype)的函数Vparse(constjson&).该函数应该尝试解析所有类型(例如A、B,然后是C)直到第一次成功(它应该隐式地解析,因为及时会有很多类型)。如何实现这种东西?我们可以使用std::variant_size不知何故。Here是接近我需要的东西。我的解决方案是明确列出所有类型的解析器。Vparse(constjson&i_j){usingParser=std::function;staticconstautops=std::vector{[](constauto&j)->MaybeV{retu

c++ - std::map::insert(...) 中的段错误

我使用了搜索,但没有找到令我满意的答案...所以...这是一段代码://VoteContainer.htypedefuint32_torder_id_t;typedefintdriver_id_t;classVote{public:enumDriverVoteResponse{YES,NO,TIMEOUT};structDriverResponse{driver_id_tdriver_id;time_ttime;DriverVoteResponseresponse;};Vote():m_order_id(0),m_time_until(0){};Vote(order_id_tinOrd

c++ - std::stringstream 获取写入数据的有效方式,复制到另一个流

在不编写自定义rdbuf的情况下,有什么方法可以有效地使用stringstream吗?也就是说,满足这些要求:可以重置流并重新开始写入,而无需释放之前的内存获取写入数据的constchar*(连同长度)而不创建临时对象在不创建临时字符串的情况下填充流如果有人能给我一个明确的“不”,那就太好了。现在,我也使用boost,所以如果有人可以提供一个boost的替代方案,那就太好了。它必须同时提供istream和ostream接口(interface)。 最佳答案 使用boost::interprocess::vectorstreamorb

c++ - 将 std::sort 限制为随机访问迭代器

我只是想知道,既然你只能将随机访问迭代器传递给std::sort,为什么不首先通过只为随机访问迭代器定义它来强制执行该限制?#include#includetemplatetypenamestd::enable_if::iterator_category,std::random_access_iterator_tag>::value,void>::typesort(ForwardIteratorbegin,ForwardIteratorend){//...}我发现单行错误消息比在实现过程中因类型错误导致的一页又一页的错误消息更容易阅读。您可以对其他算法执行相同的操作。标准的C++核心语

c++ - std::map 应该如何与没有默认构造函数的值一起使用?

我有一个要放入map中的值类型。它有一个很好的默认复制构造函数,但没有默认构造函数。我相信只要我远离使用operator[]一切都会好的。但是我最终得到了像这样的非常丑陋的构造来实际插入一个对象。(我认为如果该键已经有一个值,插入就会失败)。//equivalenttom[5]=xbutwithoutdefaultconstructionstd::map::iteratorit=m.find(5);if(it!=m.end()){m->second=x;}else{m->insert(std::make_pair(5,x));}我相信这会扫描两次map,而且看起来也很丑。有没有更简洁/

c++ - std、boost 或其他具有隐式键的哈希表容器的广泛实现

如果我理解正确,std::map和std::unordered_map都会显式存储键(存储键/值对)。是否有其他一些现成可用的容器(std、boost或其他广泛实现)不会存储key,而是允许使用函数(即使用隐式key?)从存储的值中派生key。 最佳答案 std::set或std::unordered_set,具有适用于存储值类型的散列和/或比较函数。但是,查找将通过存储的值类型而不是键来完成,因此您还需要一种方法来根据键构造一个临时对象。 关于c++-std、boost或其他具有隐式键