草庐IT

c++ - boost::function 的默认构造函数是否有不抛出保证?

问题在标题中。我在引用文档中找不到信息。我不明白为什么默认构造函数会抛出异常,但我需要确保它不会抛出异常以正确记录我的异常保证。 最佳答案 参见http://www.boost.org/doc/libs/1_54_0/doc/html/boost/function.html#idp15443616-bb:它明确指出“不会抛出”。 关于c++-boost::function的默认构造函数是否有不抛出保证?,我们在StackOverflow上找到一个类似的问题:

c++ - 为什么 'acquire/release'在c++11中不能保证顺序一致性?

-Thread1-y.store(20,memory_order_release);x.store(10,memory_order_release);-Thread2-if(x.load(memory_order_acquire)==10){assert(y.load(memory_order_acquire)==20);y.store(10,memory_order_release)}-Thread3-if(y.load(memory_order_acquire)==10){assert(x.load(memory_order_acquire)==10);}GCCAtomicWiki

c++ - C++1 1's std::string' 的底层表示是否保证有终止空字符?

这个问题在这里已经有了答案:Willstd::stringalwaysbenull-terminatedinC++11?(3个答案)关闭8年前。先从标准中摘录一些:string::operator[]()规范:const_referenceoperator[](size_typepos)const;referenceoperator[](size_typepos);Requires:posReturns:*(begin()+pos)ifposComplexity:constanttime.string::c_str()和string::data()规范:constcharT*c_str

c++ - 保证 std::container::size_type 是一个 std::size_t

正在关注thisquestion,我决定使用std::size_t作为size_type对于每个容器,出于明显的可读性原因。我知道这在理论上是可能的std::container::size_type不是std::size_t,但我认为我当前和future的配置并非如此。但是,为了避免恶意错误,我在使用它们时会检查类型是否相同。例如:BOOST_STATIC_ASSERT(boost::is_same::size_type,std::size_t>::value);std::vectorx;/*fillx*/for(std::size_ti=0;i代码的另一个地方,我使用了一个std::

c++ - 是否保证 OpenMP 矢量化?

OpenMP标准是否保证#pragmaompsimd正常工作,即如果编译器无法向量化代码,编译是否会失败?#includevoidfoo(uint32_tr[8],uint16_t*ptr){constuint32_tC=1000;#pragmaompsimdfor(intj=0;jgcc和clang无法对其进行矢量化,但不要提示(除非您使用-fopt-info-vec-optimized-missed等)。 最佳答案 不,不能保证。OpenMP4.5standard的相关部分我能找到的(强调我的):(1.3)Whenanythre

c++ - boost::variant 单一存储保证

我的目标是保证所有变体类型的单一存储:根据'neverempty'guaranteefromBoost::variant,我们需要覆盖boost::has_nothrow_copy每个有界类型。但过了一会儿该文档提到了一些关于'boost::blank'的内容,如果类型已绑定(bind),变体将设置该值而不是尝试不抛出默认复制构造函数。不清楚的是如果在有界类型列表中添加boost::blank将避免覆盖/专门化has_nothrow_copy的要求与其他类型? 最佳答案 我相信这已经很明确了。以下是boost文档中的相关部分:Acc

c++ - std::list 顺序有保证吗?

std::list中元素的顺序是否保证保持有序(当然,除非发生排序或其他事情)?此外,列表是否存在任何潜在的未定义行为,可能会混淆它们?我曾经/现在的印象是std::deque之类的容器是顺序安全的,但是std::deque不是双重的链接。 最佳答案 是的,订单在std::list中得到保证.由于UB可能发生任何事情,因此可能会混淆std::list的顺序(尽管我认为这不太可能)。简短的回答是,如果您的列表没有按照您认为的顺序排列,那么最可能的原因是您的程序中存在错误。 关于c++-st

c++ - 原子的 0 初始化是否保证将值成员设置为 0?

std::atomic的0-初始化是什么意思?变量均值?问题的来源。我有一个静态函数std::array的std::atomic,我想在第一次使用之前将其设置为0(不用说,数组所在的函数从多个线程以不可预测的方式调用)。这段代码看起来不错,但由于原子是不可复制构造的,所以无法编译:#include#includevoidfoo(){usingt=std::atomic;staticstd::arrayarr={0,0};//arr2;//error:useofdeletedfunction‘std::atomic::atomic(conststd::atomic&)’std::arra

c++ - c++ 是否像奇怪的重复模板模式一样保证将祖母基类向下转换为孙子类?

我想知道c++是否像奇怪的重复模板模式一样保证将祖母基类向下转换为孙子类。以下代码在我的环境中运行良好。但是我不确定它是否适用于任何条件/环境。请告诉我你所知道的。非常感谢。附言。老实说,我不确定我询问堆栈溢出的方式是好是坏。如果您发现不好的地方,请告诉我。再次感谢。#includetemplateclassGrandBase{public:voidprint(void){constGrandChild*grand_child=static_cast(this);std::coutgrand_child_valueclassBridgeClass:publicGrandBase{};c

c++ - 有没有办法以保证无等待的方式检查 std::future 状态是否准备就绪?

我知道我可以通过以下方式检查std::future的状态:my_future.wait_for(std::chrono::seconds(0))==std::future_status::ready但根据cppreference.comstd::future::wait_for在某些情况下可能会阻塞:Thisfunctionmayblockforlongerthantimeout_durationduetoschedulingorresourcecontentiondelays.timeout_duration为0时还是这样吗?如果是这样,是否有另一种方式以保证无等待的方式查询状态?