草庐IT

标准图

全部标签

c++ - 为什么在增强或标准中没有 "variant"?

any优于variant的一个优点是,不需要指定它可能包含的所有类型。我注意到,随着variant可能包含的类型数量的增加,人们倾向于在某个时候切换到any,因为他们根本不跟踪所有类型了。我认为any和variant之间的混合是可能的。可以将any的“placeholder”(通过放置new)存储在aligned_storage中,大小计算为constexpr函数或模板元函数,来自最大类型的样本,最终可能会被存储。另一方面,用户不需要指定any可能包含的所有类型。如果用户尝试在其中存储大于aligned_storage的内容,则any也可能随时抛出。这样的“variant_any”类是

c++ - visual studio 2015 无法编译有效代码(标准函数错误?)

我最近一直在使用c++11编写一些代码。这段代码在GCC和Clang中运行良好,我在我的项目中广泛使用了它。现在,我需要让它在MSVC中工作。我需要的所有c++11功能都标记为是。但是,此代码示例只是拒绝构建。我试图修复错误,但我还没有找到解决方案。这是示例:#include#include#includetemplatestructProviderfinal{Provider()=delete;Provider(constProvider&other):_callback{other._callback}{}Provider(Provider&&other):_callback{st

c++ - 为什么 C++ 标准特别允许关于具有不同访问说明符的类数据成员的内存布局的余地?

C++11标准要求对类的非静态数据成员在内存中进行排序,但随后专门为具有不同访问说明符的成员开辟了一个豁免。为什么?§9.2.13Nonstaticdatamembersofa(non-union)classwiththesameaccesscontrol(Clause11)areallocatedsothatlatermembershavehigheraddresseswithinaclassobject.Theorderofallocationofnon-staticdatamemberswithdifferentaccesscontrolisunspecified(Clause1

c++ - 标准库中聚合可初始化性的类型特征?

C++标准库有std::is_constructible检查是否可以从给定类型作为参数构造类。例如,如果我有一个类MyClass它有一个构造函数MyClass(int,char),然后std::is_constructible::value将是true.是否有类似的标准库类型特征来检查聚合初始化是否有效,即MyClass{int,char}格式正确并返回MyClass?我的用例:我想写一个函数模板来转换std::tuple使用聚合初始化的(通常是POD)类,具有以下签名:templateinlineClassto_struct(std::tuple&&tp);为了防止用户使用无效的Cl

c++ - C++ 标准规定的整数范围

这个问题是关于C++标准对基本整数类型的范围施加了什么。在C++17标准中,点6.9.1在基本类型上有一点4它说:Unsignedintegersshallobeytothelawsofarithmeticmodulo2^nwherenisthenumberofbitsinthevaluerepresentationofthatparticularsizeofinteger.在C标准中,它只说如果[0,max]是可以用无符号整数表示的范围,所有超出此范围的操作都以模range+1为模进行缩减.它从不说range+1应该是2的幂。引用C++标准是否意味着所有无符号整数都具有[0,2^n-

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++ - 为什么只有这些 C++ 标准库容器保证允许不完整的类型?

众所周知,C++标准库容器通常不能用不完整的类型实例化。这样做的结果是UB,尽管在实践中给定的实现要么接受代码而没有问题,要么发出编译错误。有关此限制的讨论可在此处找到:WhyC++containersdon'tallowincompletetypes?但是,在C++17中,有3个容器明确允许不完整的类型:std::forward_list(26.3.9.1/4),std::list(26.3.10.1/4),和std::vector(26.3.11.1/4)。这是N4510的结果.该文件指出,“基于Issaquahsession的讨论”,至少在一开始就决定将此类支持限制在这三个容器中

c++ - 如何在没有延迟的情况下从 Win32 中的另一个进程捕获标准输出?

我想做的类似于VisualStudio在其输出窗口或其他编辑器在其工具窗口中所做的:从我的进程A启动另一个进程B并捕获其stdout/stderr输出。到目前为止,我使用CreatePipe()让它工作,但由于某种原因,B的输出在写入时并没有立即到达B。它的行为更像是某种缓冲区被填满,当缓冲区已满时,所有缓冲区内容立即到达A。我编写了自己的测试程序,该程序输出一些内容并随后直接执行fflush(stdout)。然后输出直接到达A。但是我不能更改我想那样使用的所有B进程的代码。尝试从A冲洗管道也不起作用。这应该如何工作?我的初始化代码和消费代码:sa.nLength=sizeof(SEC

c++ - 当 C++ 标准提供将名称带入全局命名空间的 C header 时,这是否包括重载?

即将发布的C++0x标准的最终委员会草案说:EveryCheader,eachofwhichhasanameoftheformname.h,behavesasifeachnameplacedinthestandardlibrarynamespacebythecorrespondingcnameheaderisplacedwithintheglobalnamespacescope.Itisunspecifiedwhetherthesenamesarefirstdeclaredordefinedwithinnamespacescope(3.3.6)ofthenamespacestdanda

c++ - 标准异常层次结构的原因

这是一件很挑剔的事情,可能只是我的强制症发作了,但我想知道为什么标准异常类层次结构是这样设置的。exceptionbad_allocbad_castbad_typeidbad_exceptionios_base::failureruntime_errorsubclasses...logic_errorsubclasses...难道所有的bad_*异常都只是lang_support_error之类的子类吗?而ios_base::failure似乎完全不合适。是否有某些历史或技术原因导致层次结构变成这样? 最佳答案 如果我没记错的话,逻