草庐IT

std_logic

全部标签

c++ - g++ 处理复制 std::complex

作为自学项目的一部分,我研究了g++如何处理std::complex-类型,并对这个简单的函数感到困惑:#includestd::complexc;voidget(std::complex&res){res=c;}为Linux64使用g++-6.3-O3(或-Os)编译我得到了这个结果:movsdc(%rip),%xmm0movsd%xmm0,(%rdi)movsdc+8(%rip),%xmm0movsd%xmm0,8(%rdi)ret所以它将实部和虚部分别移动为64位float。但是,我希望程序集使用两个movups而不是四个movsd,即将实部和虚部作为128位包同时移动:movu

c++ - 移除 std::future 和 std::promise 的无效特化

关于描述删除std::future和std::promise的无效特化的论文P0241R0.这可能是一个愚蠢的问题,但建议的解决方案是完全删除void特化,但是当人们想要实例化一个std::future时,他们期望做什么?目的? 最佳答案 如引用文献中所述,这是可能的ifvoidwerearegulartype.voidget_value(){voidx;returnx;}这是它在其他一些语言中的工作方式,因此并非没有先例。在其他语言中,它被称为“单位”类型,因为它只有一个可能的值。(其他语言也有“null”类型,它没有可能的值,所

c++ - 试图更好地理解 std::forward、std::move

我正在编写一个基本的类模板。它的参数有两种参数类型。该类(class)的想法是将一种类型作为constref接受。另一个是ref.该类的功能是转换类型A输入B正在创建的对象最终将成为b.我想要perfect-forwarding或movesemantics此类模板的有效部分。现在这是我当前的类,只有基本类型,但计划使用可变参数结构将其扩展到任何2种类型。#ifndefCONVERTER_H#defineCONVERTER_H#includetemplateclassConverter{private:Fromin_;Toout_;public://WouldlikeforFromint

c++ - 如何将标准库与 C++ 模块一起使用? (例如 : `import std.io` )

HowdoIuseC++modulesinClang?中给出的基本示例对我有用,但不导入标准库(例如通过importstd.stdio;);过去之后http://clang.llvm.org/docs/Modules.html不清楚如何在C++模块中使用标准库,例如://foo.cppm:exportmodulefoo;//works:#include//noneofthesework:importstd.stdio;importstd.io;importstd;exportvoidtest_foo(){printf("helloworld\n");}这给出了一个错误:clang++-

c++ - 同时修改 std::valarray<T> 的元素是否安全?

如果我没理解错的话,从C++11开始,同时调用容器的const成员函数并修改容器的元素是安全的,只要容器本身不作为操作的一部分被修改(从例如cppreference.com中有关线程安全的表格中可以看出)。由于std::valarray未在(草案)标准的容器部分中列出,我不确定线程​​安全是否也适用于它。换句话说,同时从std::valarray中读取是否安全(特别是通过对切片使用operator[])?如果对T的操作是安全的,那么同时修改std::valarray的元素是否安全?我想将std::valarray用于将使用多个线程填充的多维数字数组。 最佳答

c++ - 性能差异:std::accumulate vs std::inner_product vs Loop

今天,我想分享一些在尝试实现这个简单操作时让我大吃一惊的事情:我发现了执行相同操作的不同方法:通过使用std::inner_product。实现谓词并使用std::accumulate函数。使用C风格的循环。我想通过使用QuickBench并启用所有优化来执行一些基准测试。首先,我比较了两个具有浮点值的C++替代方案。这是通过使用std::accumulate使用的代码:constautopredicate=[](constdoubleprevious,constdoublecurrent){returnprevious+current*current;};constautoresul

c++ - 如何确定 std::ofstream 打开的文件的当前大小?

我有一个类,它有一个ofstream类型的文件流。构造函数以追加模式打开文件,所有消息始终写入文件末尾。我需要将outputFile写入某个固定大小(比如1Mb),然后我需要关闭、重命名并压缩它,然后打开一个同名的新文件。这需要在文件达到一定大小时完成。我尝试使用tellg()但在互联网上阅读资料(和this)后,我明白这不是正确的方法。由于我是C++的新手,我正在尝试找出最优化和正确的方法来获取ofstream打开的文件的准确当前大小?classLogger{std::ofstreamoutputFile;intcurr_size;Logger(conststd::stringlog

c++ - 为什么 std::is_copy_constructible 的行为不如预期?

#includeintmain(){std::is_constructible_v;//false,asexpected.std::is_copy_constructible_v;//true,NOTasexpected!}根据cppref:IfTisanobjectorreferencetypeandthevariabledefinitionTobj(std::declval()...);iswell-formed,providesthememberconstantvalueequaltotrue.Inallothercases,valueisfalse.std::is_copy_c

c++ - 在 C++ 中是否允许从括号值列表中赋值 std::array?

在c++primer(第5版)中,提到不允许从花括号值列表赋值std::array。Becausethesizeoftheright-handoperandmightdifferfromthesizeoftheleft-handoperand,thearraytypedoesnotsupportassignanditdoesnotallowassignmentfromabracedlistofvalues.下面的代码作为例子给出。std::arraya1={0,1,2,3,4,5,6,7,8,9};std::arraya2={0};//elementsallhavevalue0a1=a

c++ - 我可以重载 CArchive << 运算符以使用 std::string 吗?

我在我的MFC应用程序中使用std::string,我想将它存储在文档的Serialize()函数中。我不想将它们存储为CString,因为它在那里写了自己的东西,我的目标是创建一个我知道其格式并且可以被其他应用程序读取而无需CString的文件。所以我想将我的std::strings存储为4字节(int)字符串长度,后跟包含该字符串的该大小的缓冲区。voidCMyDoc::Serialize(CArchive&ar){std::stringtheString;if(ar.IsStoring()){//TODO:addstoringcodehereintsize=theString.s