草庐IT

lambda表达式

全部标签

c++ - Visual Studio 2013 c++ lambda 捕获参数包

目前VisualStudio2013更新2不支持完整的C++11,其中一个功能是在lambda中捕获参数包。有没有一种简单的方法可以解决这个问题,或者我将不得不放弃visualstudio并使用兼容的编译器,例如mingw/g++?以下代码演示了我所想的一个简单用例:templatestd::threadinit_threaded(SomeObjectsample,Args&&...args){autofunc=[=](){sample->init(args...);};returnstd::thread(func);}这在linux下的最新xcode(5.1.1)和最新版本的g++(

c++ - 如何围绕表达式模板编写第三方库包装类

我们正在尝试在我的研究小组中实现一个新的C++代码来执行大型数值模拟(有限元、有限差分法、拓扑优化等)。该软件将被学术界和工业界的人们使用。对于软件的密集线性代数部分,我们想使用Eigen或Armadillo。我们希望围绕这些包构建一个包装器,原因有二:1.向用户公开我们自己的API而不是第三方API;2.以防我们将来需要切换库。我知道原因2是一种非常昂贵的保险形式,但我们使用以前的模拟软件遇到过这种情况。我遇到的关于包装第三方库的信息来自这些来源:Shouldthird-partytypesbeexposedinmyC++library'sAPIhttps://softwareeng

c++ - 在括号内的 lambda 中声明名称为 `this` 的变量会在 3 个不同的编译器上产生不同的结果

在C++中,可以在括号内声明变量,例如int(x)=0;。但似乎如果您使用this而不是变量名,则使用构造函数代替:A(this);调用A::A(B*)。那么第一个问题就是为什么this不一样,是不是因为变量不能命名为this?让事情变得复杂一点,让我们把this放在lambda中-structB;structA{A(B*){}};structB{B(){[this]{A(this);}();}};现在gcc调用A::A(B*),msvc打印关于缺少默认构造函数的错误,clang打印expectedexpression(https://godbolt.org/g/Vxe0fF)。它在m

c++ - 有状态 lambda 问题 - Microsoft 编译器版本 19.16.27024.1

您好,我对有状态的lambda表达式有疑问。这是一个虚拟示例,但在我看来,ms编译器做错了什么,或者我有一些未定义的行为?代码:intmain(){autostart=[x=1,z=1]()mutable{gotoresume;for(;;++z){for(x=1;x3)return1;}}};start();}微软编译器版本19.16.27024.1cl-O2/std:c++17(or-O1,-Ox)----->打印'1'然后无限数量的'2'(我认为是错误的)cl-Od/std:c++17----->打印12334g++(Ubuntu7.3.0-27ubuntu1~18.04)7.3

c++ - boost::bind 和 boost::lambda::bind 有什么区别?

我可以看到Boost有两个不同的绑定(bind)库,一个是“独立的”,可以通过包含boost/bind.hpp来使用,另一个可以通过包含boost/lambda/bind.hpp。这两者有什么区别? 最佳答案 看看这里的解释:http://boost.org/doc/libs/1_46_0/doc/html/lambda/s08.html#id2143701它们具有重叠的功能,但由于语义不同,它们不能交错使用。 关于c++-boost::bind和boost::lambda::bind有

c++ - GCC 内联汇编错误 : Cannot take the address of 'this' , 这是一个右值表达式

我仍在与GCC作斗争-编译以下内联汇编代码(使用-fasm-blocks,启用Intel风格汇编syntax)给我一个奇怪的错误Cannottaketheaddressof'this',whichisanrvalueexpression...MyClass::MyFunction(){_asm{//...movebx,this//error:Cannottaketheaddressof'this',whichisanrvalueexpression//...moveax,this//error:Cannottaketheaddressof'this',whichisanrvalueex

c++ - Xcode 对 lambda 函数的支持

我有一个用VS编写的程序,我正试图将其移植到Xcode。我遇到了几个问题,包括使用lambda函数。由于Xcode使用gcc4.2,因此不支持C++11,我将无法使用任何lambda函数吗?如果我想在我的笔记本电脑上处理代码而不重写大部分代码,我是否必须安装gcc4.6并使用终端进行编译? 最佳答案 你有几个选择:按照C++2003标准重新编写代码。安装支持代码中使用的C++11功能的GCC,而不使用Xcode(您可以使用其他IDE,例如QtCreator或EclipseCDT)。等待Xcode附带支持C++11特性的LLVMC++

c++ - 返回类型很长的表达式

我有以下功能:inlineautoiterateSomething(obj&o){autoiterators=baseIterator(o);autotranformer=boost::bind(transofrmToSomething,_1,o);typedefboost::transform_iteratoriterator_t;iterator_tbegin(iterators.first,tranformer);iterator_tend(iterators.second,tranformer);returnstd::make_pair(begin,end);}如您所见,我不知

c++ - Boost.Phoenix 是否天生就比等效的 C++11 lambda 慢(它是否使用虚拟调用、 'volatile' 用法等)?

我一直认为Boost.Phoenix使用类型推断来静态推断所有内容,直到我尝试了这段代码:#include#includeusingnamespaceboost::phoenix;usingnamespaceboost::phoenix::placeholders;structFoo{intx;};intmain(){std::vectorbar;bind(&Foo::x,ref(bar)[_1])("invalidindex");//oopsreturn0;}并得到警告:warningC4239:nonstandardextensionused:'argument':conversi

c++ - C++ 条件语句是否带有从条件表达式到语句的依赖关系?

我是专门从内存模型的角度来问的。http://en.cppreference.com/w/cpp/atomic/memory_order我问是因为我想知道我是否可以在下面使用std::memory_order_consume:mLocalMemPtr1和2以及mAtomicMemPtr是指向共享缓冲区的指针。在我正在做的生产者线程中:for(intx=0;x在消费者中:tempMemPtr=mAtomicMemPtr.load(std::memory_order_consume);while(tempMemPtr!=mLocalMemPtr2){++mLocalMemPtr2;intt