草庐IT

STD_PROP_LIST

全部标签

c++ - 为什么 std::deque 在默认构造函数中为其元素分配内存?

使用g++5.4编译器和GNU标准库libstdc++.so.6,std::vector的默认构造函数创建一个空容器,仅初始化堆栈上的内部簿记数据成员。它稍后在堆上为数据元素分配缓冲区(当插入第一个元素时)。直到最近,我还认为这是任何具有动态分配内存的标准顺序容器的常见行为。但是,std::deque的工作方式不同。跟踪以下代码#includeintmain(){std::dequed;return0;}用ltrace给出__libc_start_main(0x4024fa,1,0x7ffd088be0f8,0x405bd0_ZNSt8ios_base4InitC1Ev(0x60835

c++ - std::clamp - 检测函数返回值是否绑定(bind)到 const T&

最好不要将std::clamp返回值绑定(bind)到constref,如果它的min或max参数之一是右值.std::clamp的典型实现(非常简化):templateconstexprconstT&clamp(constT&value,constT&min,constT&max){returnvalue正如cppreferenceforstd::clamp中所述当有人写下时,情况很危险:intn=-1;constint&r=std::clamp(n,0,255);//risdangling有没有办法在编译时检测这些情况? 最佳答案

c++ - 在 MSVC 的 Debug模式下分配给 std::future 时崩溃

与Release不同,在Debug模式下使用MSVC构建时,以下代码会随机崩溃。#includeusingnamespacestd;intmain(){autol=[](){};autof=async(launch::async,l);for(inti=0;i控制台输出显示:f:\dd\vctools\crt\crtw32\stdcpp\thr\mutex.c(51):mutexdestroyedwhilebusy完整的调用栈是:https://pastebin.com/0g2ZF5C1现在显然这只是一个压力测试,但我是不是在做一些非常愚蠢的事情?在我看来,将新任务重新分配给现有的fu

c++ - 对 C++ 中的 std::get_money 和 std::put_money 的混淆

我对C++函数感到困惑std::get_money在中定义头文件。get_money有什么用根据编程概念?我有以下代码使用std::get_money.#include//std::cin,std::cout#include//std::get_moneyintmain(){longdoubleprice;std::cout>std::get_money(price);if(std::cin.fail())std::cout当我输入100.25时,它返回100。输出和货币格式之间有什么关系?我读了this引用但无法理解关系。std::put_money也存在同样的混淆。,std::ge

c++ - 在 vector 图上使用 initializer_list

我一直在尝试初始化>的map使用新的0X标准,但我似乎无法获得正确的语法。我想制作一个带有key:value=1:的单个条目的map#include#include#includeusingnamespacestd;map>A={1,{3,4}};....它在使用gcc4.4.3时出现以下错误:error:nomatchingfunctionforcalltostd::map>,std::less,std::allocator>>>>::map()编辑按照Cogwheel的建议并添加额外的大括号,它现在编译时带有警告,可以使用-fno-deduce-init-list标志消除该警告。这

c++ - Boost C++ 跨平台 (Windows & Mac) std::wstring 序列化

我正在为Windows(使用VisualStudio2008)和Mac(使用GCC)构建的程序中使用BoostC++库实现序列化。该程序在大约30个类中使用宽字符串(std::wstring)。根据平台的不同,当我保存到文件时(通过boost::archive::text_woarchive),宽字符串在输出文件中的表示方式不同。在Windows下保存:H*e*l*l*o**W*o*r*l*d*!*...在MacOSX下保存:H***e***l***l***o******W***o***r***l***d***!***...其中*是NULL字符。当我尝试使用Mac构建读取在Window

c++ - 性能 std::strstr 与 std::string::find

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++string::findcomplexity最近我注意到函数std::string::find比函数std::strstr慢一个数量级-在我的GCC4.7环境中在Linux上。性能差异取决于字符串的长度和硬件架构。差异的原因似乎很简单:std::string::find基本上在循环中调用std::memcmp-具有时间复杂度O(m*n)。相比之下,std::strstr针对硬件架构进行了高度优化(例如使用SSE指令)并使用更复杂的字符串匹配算法(显然是Knuth-Morris-Pratt)。我也很惊讶没

c++ - map 上的无效模板参数 std::map< std::string, Stock*> &stocks

我有声明(或类似的)std::map&stocks;贯穿我的代码。Eclipse不喜欢这样并产生“无效的模板参数”错误。库存声明为:classStock{public:Stock(std::string,qbbo::Financial_status_indicator,qbbo::Security_class,qbbo::Current_trading_state,qbbo::Market_category,qbbo::Reg_sho_action);~Stock();voidsetFinancialStatusIndicator(qbbo::Financial_status_indi

c++ - Netbeans 7.2 中无法识别的命令行选项 "-std=c++11"c++

我正在尝试使用C++11。通过互联网筛选后,我发现我所要做的就是右键单击我的项目->属性,然后在“C++标准”下选择C++11。当我使用C++11运行程序时,出现此错误“无法识别的命令行选项-std=c++11.人们说的一种解决方案是在“附加选项”中添加-g-std=c++0x但随后我得到“无法识别的命令行选项-std=c++0x。我已经下载了gcc-4.7.1.tar.gz,但我不知道如何使用它。有谁知道如何摆脱这个错误或知道如何使用c++11编译netbeans? 最佳答案 将你的gcc版本升级到4.7+。从gcc4.3开始支持

c++ - 如何将 utf16 ushort 数组转换为 utf8 std::string?

目前我正在编写一个插件,它只是一个现有库的包装器。插件的主机传递给我一个utf-16格式的字符串,定义如下typedefunsignedshortPA_Unichar;并且包装库只接受一个constchar*或一个std::stringutf-8格式的字符串我试着写一个像这样的转换函数std::stringtoUtf8(constPA_Unichar*data){std::wstring_convert,char16_t>convert;returnstd::string(convert.to_bytes(static_cast(data));}但显然这不起作用,给我一个编译错误“st