草庐IT

std=c++11

全部标签

c++ - 在 C++ 中调用 std::sort 时使用 std::greater 的语法

反向排序容器的推荐方法(例如:Sortingavectorindescendingorder)似乎是:std::sort(numbers.begin(),numbers.end(),std::greater());我知道第三个参数是帮助sort()进行比较的函数或仿函数,而std::greater是模板仿函数,但我不明白这里发生了什么。我的C++很生疏,所以如果这些是愚蠢的问题,请耐心等待:为什么std::greater之后有括号?那里?我们要创建一个新的std::greater吗?对象在这里?在那种情况下,我们为什么不需要new关键词在这里? 最佳答案

非 C++11 程序中的 C++11 代码/库

假设我将C++11中的代码(我将使用Lambdas)编译为“.o”或库“.a”。我有一个程序,其中我将包含以前的库和头文件,我不能用C++11编译,但是旧的(C++98)。它会编译并正常工作吗? 最佳答案 如果满足以下条件,它将正常工作:(公共(public))头文件不使用任何C++11特性ABI没有改变就此咨询您的平台/编译器没有共同的依赖关系发生变化根据VaughnCato链接的GCC文档,这包括标准库。任何在使用C++11编译时生成不同代码或对象布局并被库和客户端使用的东西都可能是一个问题……即使它没有在接口(interfac

c++ - 是否可以为 std::array 定义隐式转换运算符?

我正在尝试拥有一个可以隐式转换为std::array的C++类。转换有效,但不是隐式的。#includeclassA{private:std::arraydata;public:operatorstd::array&(){returndata;}operatorconststd::array&()const{returndata;}};intmain(){Aa;a[1]=0.5f;//failstocompileautoit=a.begin();//failstocompileAb;static_cast>(b)[1]=0.5f;//okautoit2=static_cast>(b).

C++11 在 Visual Studio 2012 中的委托(delegate)构造函数

我正在尝试在VisualStudio2012中使用委托(delegate)构造函数。以下代码在Xcode4.6中编译但在VisualStudio2012中不编译:在.h文件中classErrorReportDlg:publicQDialog{public:ErrorReportDlg(OwlExceptionPtrex,QWidget*parent);ErrorReportDlg(QWidget*parent);virtual~ErrorReportDlg();}在.cpp文件中//FWIW,OwlExceptionPtris//typdefboost::shared_ptrOwlEx

c++ - 错误 : no instance of overloaded function "std::make_shared" matches the argument list

查看ApreviousstackQuestionstd:make_sharedvsstd::shared_ptr,我试图在一个uni项目中实现它。这是之前的“问题”:Ican'tthinkofanysituationwherestd::shared_ptrobj(newObject("foo",1));wouldbepreferredtoautoobj=std::make_shared("foo",1);因此我采用了这段代码:std::shared_ptrpT1(newTriangle(pCanvas,30,30,30,60,60,30,255,0,0));并将其修改为这段代码:aut

c++ - std::codecvt_utf8 方面的问题

这是使用std::codecvt_utf8的代码片段要从wchar_t转换的方面到UTF-8。使用VisualStudio2012,我的期望没有达到(请参阅代码末尾的条件)。我的期望错了吗?为什么?或者这是一个VisualStudio2012库问题?#include#include#includeintmain(){std::mbstate_tstate=std::mbstate_t();std::localeloc(std::locale(),newstd::codecvt_utf8);typedefstd::codecvtcodecvt_type;codecvt_typeconst

c++ - std::list<int> 的默认构造函数可以抛出吗?

我(快速)查看了C++标准和在线C++引用,但找不到这个简单问题的答案:可以std::list的默认构造函数吗?扔?如果是这样,为什么会抛出? 最佳答案 简短回答:它可以,但它可以以相当安全的方式实现:默认构造函数构造了一个空列表,因此几乎不需要在进程中实际分配内存。大多数列表实现不会为空列表分配任何内存。但是,默认构造函数不是真正默认构造函数,因为它有一个默认参数:explicitlist(constAllocator&=Allocator());Allocator本身是一个模板参数,因此如果Allocator有一个足够笨(或复杂

c++ - 读取 std::string,从 std::string 中删除所有特殊字符

我是这个论坛和c++的新手。所以请原谅我的疑惑/问题。我正在尝试读取std::string。我知道我可以使用at或[int]运算符访问元素。我有2个问题:1)删除或删除字符串中的所有特殊字符(包括空格)2)只读取该字符串的前4个字符或字母对于1),我正在检查std::erase和std::remove_if,但我也需要消除所有特殊字符和空格。这意味着我需要包括isspace()/isalpha()等所有条件。没有单一的方法可以一次全部删除吗?对于2),我可以像访问数组一样访问字符串,我的意思是string[0]、string[1]、string[2]、string[3]。但是我不能将它

c++ - std::set 需要多少额外内存(如果有的话)来存储它的元素 v.s.一个 std::vector?

它必须依赖于实现,但是使用std::set是否有任何显着的内存开销?编辑:在我的例子中,我有一组std::string,平均字符串长度为9个字母。 最佳答案 std::set被实现为二叉树,因此具有带左右指针的节点以及数据元素。这些中的每一个的分配都可以由您的动态内存库函数进行舍入。所以是的-对于一个或三个机器字的元素,开销将作为比率/百分比“显着”(例如2个64位指针+一个char可以很容易地四舍五入到例如32字节...32倍的开销),从系统/应用程序行为的角度来看可能重要也可能不重要。如果您关心,请始终在您自己的系统上进行测量。

c++ - std::thread 的线程安全数组?

mystruct**=(mystruct**)calloc(10,sizeof(mystruct*);for(unsigndinti=0;i函数new_piece将数据写入mystruct[i]。更具体地说,该函数更改了mystruct[i][0],mystruct[i][1],...,mystruct[9]的值如何让上面的操作线程安全? 最佳答案 正如评论中已经提到的,该代码似乎是“线程安全的”,但它可能会遭受“缓存抖动”的困扰。首先让我解释一下它是什么,以及为什么这可能会在您的代码中发生:什么是缓存抖动:“缓存行”是从内存中提取