草庐IT

不符合

全部标签

c++ - 符合标准的自定义分配器

allocate方法传入0是否可以抛出异常?谢谢。附言Ifn==0,thereturnvalueisunspecified.这是否意味着allocate不应该抛出异常?我倾向于认为,如果n==0不允许抛出,那么标准会清楚地说明这一点。 最佳答案 所有标准必须说明的(§20.1.5/2)都是给定的T–任何类型X–类型T的Allocator类a–X&类型的值n–X::size_type类型的值,如果n等于0,则表达式a.allocate(n)的返回值未指定。一方面,考虑到X::allocate没有任何强制性异常规范并且显式可能抛出std

c++ - QTextStream 行为搜索不符合预期的字符串

我有这几行代码:QFilefile("h:/test.txt");file.open(QFile::ReadOnly|QFile::Text);QTextStreamin(&file);boolfound=false;uintpos=0;do{QStringtemp=in.readLine();intp=temp.indexOf("something");if(p这个想法是在一个文本文件中搜索一个特定的字符序列,当找到时,从头加载文件到搜索到的文本出现的位置。我用于测试的输入是:thisislineone,thefirstlinethisislinetwo,itissecondthis

c++ - "if (getline(fin, str)) {}"是否符合C++11标准?

我检查了C++11标准,发现了以下事实:std::getline(fin,str)返回一个basic_ios对象,其类有一个成员函数explicitoperatorbool()const;basic_ios类没有成员函数operatorvoid*()const;作为C++11之前的版本。所以,我认为if(getline(fin,str)){}不符合标准。应该写成if(bool(getline(fin,str)){}。(但是,VC++2012对此用法给出警告。即强制void*为bool)我说的对吗? 最佳答案 代码是一致的。当对象自动

c++ - 如何设计符合标准的 std::any 实现的存储?

标准工作草案(n4582、20.6.3、p.552)对std::any的实现提出了以下建议:Implementationsshouldavoidtheuseofdynamicallyallocatedmemoryforasmallcontainedobject.[Example:wheretheobjectconstructedisholdingonlyanint.—endexample]Suchsmall-objectoptimizationshallonlybeappliedtotypesTforwhichis_nothrow_move_constructible_vistrue.

c++ - 将 float 与整数进行比较的符合标准的方法?

假设我有两个对象i和f各类型I和F.我知道std::is_integral::value是真的,std::is_floating_point::value是真的。是否有一种完全符合标准的方法来查明i的值是否为小于f的值?请注意对“完全符合标准”的强调,对于这个问题,我只对得到C++标准保证的答案感兴趣。简单的实现i不起作用,因为f的值可能放不下i.简单的实现F(i)也不起作用,因为f的精度可能不足以表示i,导致i舍入为等于f的值(如果你有IEEE754float,16777219失败)。但真正的困境来了:如果你想使用std::numeric_limits::max为了缓解这些问题,您回

c++ - 仅在实例化时使用 `static_assert` 使类模板特化无法编译的安全、符合标准的方法?

假设我们想要制作一个模板类,它只能用数字实例化,否则不能编译。我的尝试:#includetemplatestructOnlyNumbers{public:structC{};static_assert(std::is_same::value,"Tisnotarithmetictype.");//OnlyNumbers*ptr;};templatestructOnlyNumbers>>{};structFoo{};intmain(){OnlyNumbers{};//Compiles//OnlyNumbers{};//Error}Livedemo-所有三个主要编译器似乎都按预期工作。我知道

c++ - GCC 的 decltype(auto) 不符合标准?

我尝试使用不同的选项在GCC8.2下编译此C++代码,它总是成功,不产生任何警告并输出true:int&&a=123;decltype(auto)b=a;std::cout::value;同时,相同的代码不会在Clang中编译,如果我对标准的理解是正确的,那就是符合标准的行为。decltype上的cppreference:Iftheargumentisanunparenthesizedid-expressionoranunparenthesizedclassmemberaccessexpression,thendecltypeyieldsthetypeoftheentitynamedb

c++ - 在不复制数据的情况下,决定 what() 从继承自 std::system_error 的类返回什么的符合标准的方法是什么?

我使用从std::system_error继承的类进行错误处理,我想控制调用what()时返回的内容。原因:标准(C++11和C++1yCD草案-N3690,下面的§引用是后者)没有指定what()返回的字符串应该是什么样子就像,它只是在§19.5.6.2(14)中给出注释:Note:ThereturnedNTBSmightbethecontentsofwhat_arg+":"+code.message().—endnote因此它应被视为依赖于实现。(顺便说一句,不应该是code().message()而不是code.message()吗?)所以,问题是:如果我想符合标准并且不依赖于实

c++ - 编写符合严格别名的 memcpy

当询问“如何实现符合严格别名规则的memcpy函数”时,一般的回答是类似void*memcpy(void*dest,constvoid*src,size_tn){for(size_ti=0;i但是,如果我理解正确的话,编译器可以自由地重新排序对memcpy的调用和对dest的访问,因为它可以重新排序对char*的写入和从任何其他指针类型的读取(严格的别名规则只能防止对char的读取重新排序*写入任何其他指针类型)。这是正确的吗?如果是,是否有任何方法可以正确实现memcpy,或者我们应该只依赖内置的memcpy?请注意,这个问题不仅涉及memcpy,还涉及任何反序列化/解码函数。

c++ - 验证我的编译器是否符合 c++14 的最简单的 C++ 示例?

我下周要上C++11/14的课,需要验证我的设计工具是最新的并且可以实际编译C++11/14。我可以将最简单的代码片段放在一起以验证我是否可以在我的Linux机器上实际编译和执行C++11/14代码?我知道我需要GCC4.9.X或更高版本,但我只想确保在出现之前一切正常。感谢您的帮助。 最佳答案 您最初可以使用-std=c++14进行编译。如果您的gcc(或clang)不兼容c++14,那么编译将失败(由于未知标志):g++:error:unrecognizedcommandlineoption'-std=c++14'关于功能可用性