草庐IT

last_list

全部标签

c++ - 从 dll 返回 std::string/std::list

简短的问题。我刚刚得到了一个我应该与之交互的dll。Dll使用来自msvcr90D.dll(注意D)的crt,并返回std::strings、std::lists和boost::shared_ptr。运算符new/delete不会在任何地方重载。我假设crtmixup(发布版本中的msvcr90.dll,或者如果使用更新的crt重新构建组件之一等)最终会导致问题,并且应该重写dll以避免返回任何可能调用new/删除(即任何可以在我的代码中对在dll中分配的内存块(可能使用不同的crt)调用delete的东西)。我是对还是错? 最佳答案

C++11 lambda : mixed capture list

谁能给我看以下示例:1)按值捕获x的Lambda。y引用。如果未指定,其余部分的默认设置是什么?2)按值捕获x的Lambda。y引用,其他的都是值。3)按值捕获x的Lambda。y引用,其他所有引用。另外,是否允许同一范围内的2个lambda具有相同的捕获签名,例如两者都是[],或者都是[&x,=]谢谢 最佳答案 1)[x,&y](){}未捕获其余部分2)[=,&y](){}3)[&,x](){}Thecapture-listisacomma-separatedlistofzeroormorecaptures,optionallyb

c++ - 使用 std::sort 对 std::list 进行排序

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Sortlistusingstlsortfunctionwhyonlystd::list::sort()?我的问题是我们可以使用std::sort函数对两个std::list进行排序吗?我有2个字符串列表std::listlist1,list2;.....//enteringvaluestoliststd::sort(list1.begin(),list1.end());std::sort(list2.begin(),list2.end());当我对这些列表进行排序时,我遇到了错误。我尝试使用std::vec

c++ - 稍后添加 initializer_list 构造函数时,使用大括号初始化语法会改变构造行为吗?

假设我有这样的类(class):classFoo{public:Foo(intsomething){}};我使用以下语法创建它:Foof{10};然后我添加一个新的构造函数:classFoo{public:Foo(intsomething){}Foo(std::initializer_list){}};f的构造会发生什么?我的理解是它将不再调用第一个构造函数,而是现在调用初始化列表构造函数。如果是这样,这似乎很糟糕。为什么这么多人推荐使用{}语法而不是()进行对象构造,而稍后添加initializer_list构造函数可能会默默地破坏事情?我可以想象这样一种情况,我正在使用{}语法构造

c++ - 怎么解析: constructing unnamed temporary with braced init list

我最近yetagainencountered符号(constint[10]){10,9,8,7,6,5,4,3,2,1}我记得它在C和C++中都是允许的,但通过完全不同的语言机制。我相信在C++中,正式的观点是它是通过显式类型转换(T)构造一个未命名的临时对象。cast-expression将减少为static_cast,通过C++11§5.2.9/4构造一个对象:”anexpressionecanbeexplicitlyconvertedtoatypeTusingastatic_castoftheformstatic_cast(e)ifthedeclarationTt(e);iswe

c++ - 带有 initializer_list 的可选构造函数

这个特殊的构造函数采用初始化列表的目的是什么。有人可以举例说明这在什么时候有用吗?templateconstexprexplicitoptional(in_place_t,initializer_listil,Args&&...args);上面和这个有什么不同?templateconstexprexplicitoptional(in_place_t,Args&&...args);引用:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3793.html#optional.object.ctor附:不确定是使用c++14还是

c++ - Initializer_list 作为非模板上下文中数组引用参数的参数

我的问题涉及这个非常简单且简短的代码,其中尝试在接受数组引用参数的两个非模板函数之间进行重载解析。该问题已在其他地方发布,但在模板扣除上下文中。代码如下:#includevoidfoo(constint(&x)[3]){std::coutg++4.8.3编译此代码,选择第一个函数作为(我想)唯一可行的,而clang3.4没有编译它,说对foo的调用是模棱两可的(为什么?)。哪个编译器做正确的事?即使删除第二个重载,clang也不会编译代码:似乎根本不接受initializer_list来初始化数组引用。这是buggy吗? 最佳答案

c++ - Clang 和 GCC 之间的 const auto std::initializer_list 区别

我试图了解在结合初始化列表和constauto时C++11的正确行为应该是什么?.对于以下代码,我在GCC和Clang之间得到了不同的行为,并且想知道哪个是正确的:#include#include#includeintmain(){conststd::initializer_listl1={1,2,3};constautol2={1,2,3};std::cout用g++编译的输出是:explicit:St16initializer_listIiEauto:St16initializer_listIKiE虽然clang++编译的版本产生:explicit:St16initializer_

c++ - varargs(va_list va_start) 不适用于传递引用参数

这个问题在这里已经有了答案:关闭12年前.PossibleDuplicate:Aretheregotchasusingvarargswithreferenceparameters您好,我对可变参数有疑问。查看我的代码(MicrosoftVisualStudio2005或2008)。#includestructTest{inta;};voidT1(intn,...){va_listargs;va_start(args,n);char*p=va_arg(args,char*);va_end(args);}voidT2(Testn,...){va_listargs;va_start(args

c++ - 更漂亮的 "pointer to last element"语法,std::vector?

我想知道是否有更漂亮的语法来获取指向C++vector中最后一个元素的普通指针(不是迭代器)std::vectorvec;int*ptrToLastOne=&(*(vec.end()-1));//theotherwayIcouldseewasint*ptrToLastOne2=&vec[vec.size()-1];但是这两个都不是很好看! 最佳答案 int*ptrToLastOne=&vec.back();//precondition:!vec.empty() 关于c++-更漂亮的"po