草庐IT

C++标准

全部标签

c++ - 分配但不使用分配器的标准库设施

在大多数C++标准库分配内存的地方,用户可以通过提供满足Allocatorrequirements的类来自定义它。.例如,几乎所有容器都采用分配器模板参数,std::allocate_shared返回一个shared_ptr,其包含的元素和控制block均通过提供的分配器进行分配。但是,有几个地方标准库可以(可能)分配内存,但不提供Allocator支持。我能想到的是:std::make_unique()(没有对应的allocate_unique())std::anystd::function(分配器支持将在C++17中移除)std::valarraystd::basic_filebu

c++ - 单元测试调用标准库的 C++ 方法的模式

我正在编写一个C++类来包装套接字(我知道这有很好的库——我正在自己练习):classSocket{public:intinit(void);//callssocket(2)//otherstuffwedon'tcareaboutforthesakeofthiscodesample};这个类又被其他几个人使用,我知道我可以用googlemock进行单元测试通过子类化和模拟。但是我想开发这个类testfirst,目前有点卡住了。我不能在C标准库(即socket.h,在这种情况下)上使用googlemock,因为它不是C++类。我可以围绕我需要的C标准库函数创建一个薄的C++包装器类,例如

c++ - stdio 总是设置 errno 吗?

当stdio流遇到错误(但不是EOF)时,将设置流的错误指示器,以便ferror()返回非零值。我一直认为errno中提供了更多信息。但我怎么知道的?一些功能的文档[例如manfopenunderLinux]表示errno也将被设置。但是manfgets根本没有提到errno。glibc信息页面令人放心:Inadditiontosettingtheerrorindicatorassociatedwiththestream,thefunctionsthatoperateonstreamsalsoset`errno'inthesamewayasthecorrespondinglow-lev

c++ - 在 C++11 标准的 §7.3.1.2/3 中有一些我不理解的细节

C++11标准中的§7.3.1.2/3(重点是我的):Everynamefirstdeclaredinanamespaceisamemberofthatnamespace.Ifafrienddeclarationinanonlocalclassfirstdeclaresaclassorfunctionthefriendclassorfunctionisamemberoftheinnermostenclosingnamespace.Thenameofthefriendisnotfoundbyunqualifiedlookup(3.4.1)orbyqualifiedlookup(3.4.3

c++ - 整数除法溢出

问题我一直在考虑整数(int类型)溢出,我想到除法可能会溢出。示例:在我当前的平台上,我有INT_MIN==-INT_MAX-1因此INT_MIN因此INT_MIN/-1>-INT_MAX/-1因此INT_MIN/-1>INT_MAX.因此,除法(INT_MIN/-1)会溢出。问题所以,我有两个问题:可以编写什么(跨平台)C代码来防止除法溢出(对于类型(有符号)int)?哪些保证(在C或C++标准中)可能有助于设计代码?例如,如果标准保证我们拥有INT_MIN==-INT_MAX-1或INT_MIN==-INT_MAX,然后出现如下代码防止溢出。#include/*Trytodivid

c++ - 使用 C++17 处理 Unicode 的高效、符合标准的机制是什么?

短版:如果我想编写可以有效执行Unicode字符操作的程序,能够输入和输出UTF-8或UTF-16编码的文件。使用C++执行此操作的合适方法是什么?长版:C++早于Unicode,并且两者都已经有了显着的发展。我需要知道如何编写符合标准且无泄漏的C++代码。我需要一个明确的答案:我应该选择哪个字符串容器?std::string用UTF-8?std::wstring(不太了解)std::u16string使用UTF-16?std::u32string使用UTF-32?我应该完全坚持使用上述容器之一还是在需要时更换它们?使用UTF字符串时,我可以在字符串文字中使用非英语字符吗,例如波兰语字

c++ - R 中的算术在数字上比在整数上更快。这是怎么回事?

我正在将一些主要使用数字数据(即double)的代码转换为整数,并进行了快速基准测试以查看我获得了多少效率。令我惊讶的是它慢了......大约20%。我以为我做错了什么,但原始代码只是对中等大小的vector进行一些基本的算术运算,所以我知道不是这样。也许我的环境搞砸了?我重新启动,结果相同……整数效率较低。这开始了一系列测试和跳入兔子洞。这是我的第一个测试。我们使用基本R的sum对一百万个元素求和。请注意,对于R版本3.5.0,时间有很大不同,对于v3.5.1,时间大致相同(仍然不是人们所期望的):set.seed(123)int1e6从现在开始,版本3.5.0和3.5.1给出几乎相

c++ - 在 C 和 C++ 中正确使用字符串存储

流行的软件开发商和公司(JoelSpolsky,FogCreeksoftware)在编写C或C++代码时倾向于使用wchar_t来存储Unicode字符。关于良好的编码实践,应该何时以及如何使用char和wchar_t?在编写利用Unicode的软件时,我对POSIX合规性特别感兴趣。当使用wchar_t时,您可以在每个字符或每个数组元素的基础上查找宽字符数组中的字符:/*Ccodefragment*/constwchar_t*overlord=L"ov€rlord";if(overlord[2]==L'€')wprintf(L"Charactercomparisononaper-ch

c++ - 标准的 c++11 方法来删​​除一个类型的所有指针

有没有办法用一些c++11或至多一个boost库来做到这一点?#include#includeusingnamespacestd;templateclassremove_all_pointers{public:typedefTtype;};templateclassremove_all_pointers{public:typedeftypenameremove_all_pointers::typetype;};intmain(){//correctlyprints'i'ongcccout::type).name() 最佳答案 这并不

c++ - boost::format 和自定义打印标准容器

我的命名空间中有一个函数ns这有助于我打印STL容器。例如:templatestd::ostream&operator&set){stream这非常适合使用operator进行打印直接:std::setx={"1","2","3","4"};std::cout但是,使用boost::format是不可能的:std::setx={"1","2","3","4"};boost::format("%1%")%x;问题相当明显:Boost不知道我希望它使用我的自定义operator打印与我的命名空间无关的类型。在添加using之外申报成boost/format/feed_args.hpp,有没