草庐IT

c++ - experimental::basic_string_view<> 是否适用于右值?

我不是100%确定以下代码在语义上是正确的:#include#includeintmain(){std::stringstr="lvaluestring";std::experimental::string_viewview_lvalue(str);std::experimental::string_viewview_rvalue(std::string{"rvaluestring"});std::coutLiveonWandbox问题:我可以合法地将右值绑定(bind)到std::experimental::basic_string_view吗?,还是只是UB?如果是,它是如何工作的

c++ - cout 是否保证有 ctype<char> 刻面?

给定:autofoo="ABCDEFGHIJKLMNOPQRSTUVWXYZ"s我可以通过以下方式将所有字符转换为小写:use_facet>(cout.getloc()).tolower(data(foo),next(data(foo),foo.size()));LiveExample但这取决于cout.getloc()包含ctypefacet.假设我使用的是未修改的cout我可以假设cout.getloc()将包含facetctype还是我需要在使用前确认这一点:has_facet>(cout.getloc()) 最佳答案 来自c

c++ - optional<T> 进入 C++ 标准的含义

std::optional构造最近(?)被采用到C++17语言标准中。现在,现有API中有很多地方std::optional是替代函数返回类型的候选者;本质上,这些函数试图检索/生成某些东西,但不能保证一定会成功:在容器中查找元素。通过键访问映射中的值。分配内存从文件或网络建立输入/输出流因此,我的问题是:标准委员会是否正在考虑(甚至已经接受)对涉及使用std::optional的已建立API进行更改/添加??如果是,标准的哪些部分(据您所知)可能会发生变化?C++17或更高版本是否会发生此类更改? 最佳答案 Isthestanda

c++ - 使用 boost::spirit::x3 解析为 vector<boost::string_view>

这是我的previousone的后续问题关于boost::spirit::x3和boost::string_view.虽然我可以解析成std::vector(liveexample),解析为std::vector失败并出现以下编译错误:#include#include#includenamespaceboost{namespacespirit{namespacex3{namespacetraits{templatevoidmove_to(Itb,Ite,boost::string_view&v){v=boost::string_view(b,std::size_t(std::dista

如何使图像在放置在&lt; a-scene&gt;中使用&lt; a-assets&gt;和&lt; a-image&gt;

我正在尝试使用AfrAme-ar.js和Aframe.js的Web的增强现实。我想制作一个我放置的图像可拖动。我有用标签首先注册图像,然后使用在网络摄像头中标识标记时显示图像。该图像已成功显示,但即使尝试了许多选项,我也无法使其拖动。我的代码进入这里:AugmentedRealityForWeb看答案这不是A型框架内置的,但是您可以使用第三方组件来获得所需的结果。aframe-click-drag-component允许在屏幕上单击和拖动实体:查看演示.

c++ - 在#include <cstdint> 之后使用类型的 Clang++ -fmodules 错误

当使用-fmodules编译时,以下简单的测试用例文件给我一个编译时错误,提示来自Clang的github镜像的“master”,使用如下所示的命令。我想知道这是否是Clang的新实验模块功能的错误——可能是标准库的模块映射实现的问题——或者我做错了什么。如果我添加-fbuiltin-module-map,错误仍然出现到命令。有趣的是,如果我替换stdint.h,错误不再出现对于cstdint.#includeuint64_tfoo;这是我的编译命令,带有错误信息:anhall@leviathan:/Users/anhall/impersonal/code/llvm-reflexpr/

c++ - static_cast<T&&>(t) 编译速度比 std::forward<T>(t) 快?

最近,我在这里阅读了range-v3的提交评论:https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497提交消息说,marginallyimprovecompiletimesbyreplacingstd::forwardwithstatic_cast我知道std::forward(t)返回static_cast(t),按照标准。我也知道有时static_cast(t)当T&&t时会正常工作是通过引用折叠规则的通用引用(或转发引用)。我感兴趣的是提交消息说static_c

c++ - 我的 g++ 使用 vector<weak_ptr> erase() 方法生成奇怪的警告

我有以下C++代码:#include#include#include#includevoiderase_from_vector(std::vector>&mvec){for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);}intmain(void){#if0std::vector>mvec;for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);#endif}当我这样编译时,GCC会生成

c++ - NAN -> 区分除以零和具有非常大的负值的指数

我包括了一个checkfornan's在我的测试套件中。现在在下一行抛出一个SIGFPEconstdoubleretVal=exp(exponent);指数的值大约为-4000。这当然非常接近于零,如果没有nan检查,计算将继续为零。信号SIGFPE现在被抛出。我假设这是一个denormalnumber(表示为NAN)。如何区分被零除和具有非常大负值的指数?在第二种情况下,在我的情况下使用零进行进一步计算,因为我不需要区分+0和-0。编辑:我尝试了@user2079303的建议。我的代码看起来像这样#includevoidfpe_handler(intsigno,siginfo_t*i

c++ - 模板函数中的输出 vector <T>

这段代码报错:templatevoidprint_vector(vector&v,stringsep){std::ostream_iteratorostr_it(std::cout,sep);std::copy(begin(v),end(v),ostr_it);}main.cpp:17:30:error:nomatchingconstructorforinitializationof'std::ostream_iterator'std::ostream_iteratorostr_it(std::cout,sep);我很困惑,因为如果我在模板函数之外执行并直接输出vector,则没有错误