草庐IT

STD_PROP_LIST

全部标签

c++ - libc++ std::istringstream 不会抛出异常。漏洞?

在配置std::istringstream以在设置failbit时抛出异常后,我在libc++中没有发生任何异常(这是在linux下,在libcxxrt的支持下编译的libc++).我想这是libc++或libcxxrt中的错误:#include#includetemplatestd::istream&getvalue(std::istream&is,T&value,constT&default_value=T()){std::stringstreamss;std::strings;std::getline(is,s,',');ss>value).fail())value=defaul

c++ - 使用 std::shared_ptr<std::vector> 而不是 boost::shared_array 有意义吗?

现在我正在重写部分代码以使用C++11标准。在某些地方我发现了以下代码:boost::shared_arrayarray;是否可以将其替换为:std::shared_ptr>array;我正在尝试在我的代码中替换C++11中已经存在的所有boost功能。我需要澄清一点。实际上我需要一个原始数组(但有引用计数,所以它可以自动删除),不需要所有那些vector特征。所以boost::shared_array解决了我想要的问题,没有任何额外的成本。但我试图让我的代码尽可能多地使用新标准(尽管新标准仍未涵盖来自boost的许多库)。谢谢。 最佳答案

c++ - 如何分析 g++/std::mutex 下的锁争用?

问题是否有任何开源工具或是否有人有任何技术/代码来分析std::mutex争用的程度运行代码?我想在每个std::mutex实例的粒度(按时间或数量)计算锁争用的百分比。如果有一个不需要重新编码的嵌入式工具,那就更好了。我正在寻找一种适用于std::thread和g++的技术:在应用程序退出时,我想将互斥锁争用统计信息转储到日志文件中,这样我就可以在实际运行的上下文中监控线程代码的质量。注意我看过thisthread.不幸的是,答案要么需要大量现金,要么在Windows上运行。 最佳答案 我推荐像AMDCodeXL这样的东西或Int

c++ - 类 std::out_of_range 在哪里完全定义?

我正在我的UbuntuLinux上的/usr/include/c++下搜索。在/usr/include/c++/stdexcept中,我发现了这个:classout_of_range:publiclogic_error{public:explicitout_of_range(conststring&__arg);};但是我在任何地方都找不到out_of_range()构造函数的定义。此外,当STL抛出out_of_range()异常时,它使用(示例取自STL_vector.h):__throw_out_of_range(__N("vector::_M_range_check"));而且

c++ - 使用反向迭代器插入到 std::list 会更改原始反向迭代器的值

在网上搜索了很多,都没有找到问题的答案。我正在使用reverse_iterator向std::list插入一个值。虽然插入发生在预期的适当位置,但我注意到用于插入的原始reverse_iterator的值发生了变化。完全不相关的reverse_iterator的值也发生了变化。我已经能够在一个简单的例子中重现这一点#include#include#includeintmain(){//Creatingalistofvalues1,2,4,5std::listmyList;myList.push_back(1);myList.push_back(2);myList.push_back(4

c++ - forward_list、set、list 等如何调用 std::allocator?

我注意到分配器只能分配T类型的对象并保留大小为n*sizeof(T)的内存块.std::list内部的链表节点然而,类型不一定是T类型的对象,它们的大小也不一定与T相同对象。那样的话,怎么可能std::list使用std::allocator分配内存? 最佳答案 这就是为什么rebindtype存在。它允许您创建一个类似的分配器,而不是分配其他东西(例如node)。基本上是这样的:std::allocatorint_alloc;std::allocator::rebind>node_alloc;//Perhapsmoreuseful

c++ - 传递给 std::sort 时,全局函数比仿函数或 lambda 慢

我做了一个小测试来检查全局函数/仿函数/lambda作为std::sort函数的比较器参数的性能。Functor和lambda具有相同的性能。我惊讶地发现,看起来是最简单回调的全局函数却慢得多。#include#include#include#include#include#include#include#include#includeusingnamespacestd;constintvector_size=100000;boolCompareFunction(conststring&s1,conststring&s2){returns1[0]v(vector_size);for(s

c++ - std::set 删除复杂性异常?

我试图找出从std::set中删除多个元素的复杂性。我正在使用thispage作为来源。它声称使用迭代器删除单个项目的复杂度是O(1)分摊的,但使用范围形式删除多个项目是log(c.size())+std::distance(first,last)(即-集合大小的日志+删除的元素数)。从表面上看,如果要删除的元素数(n)远小于集合中的元素数(m),这意味着循环遍历要删除的元素并一次删除它们时间更快(O(n))比一次调用删除它们(O(logm)假设n显然,如果真的是这样的话,第二种形式的内部实现只会执行上述循环。这是站点错误吗?规范中的错误?我只是错过了什么吗?谢谢,沙查尔

c++ - 将非英文字符串存储在 std::string 中

我在std::wstring中有一个简单的字符串std::wstringtempStr=_T("F:\\Projects\\Current_자동_\\Cam.xml");我想将这个字符串存储在std::string中。我试过下面的代码,但结果与输入的字符串不一样std::wstringtempStr=_T("F:\\Projects\\Current_자동_\\Cam.xml");//setupconvertertypedefstd::codecvt_utf8_utf16convert_type;std::wstring_convertconverter;//useconverter(

c++ - std::atomic 访问是否作为内存屏障?

编译器能否对原子指令重新排序,或者原子指令是否充当内存屏障?再说一遍,写在原子指令之后的指令能在原子指令之前执行吗?请看下面的代码。如果useMapA=false在mapB更新和读取线程开始之前移动,我们将使用无效的mapB。注意:更新线程每15分钟才发生一次,因此我们有一个非常好的结构化流程,以及避免使用昂贵的锁定调用的方法!std::atomicuseMapA;std::mapmapA,mapB;publicvoidupdateMap(map*latestMap){if(useMapA){mapB=std::move(*latestMap);useMapA=false;}else{