草庐IT

0x0000007c

全部标签

C++0x lambda vs block

我今天在探索C++0x,遇到了新的lambda特性。我的问题是这些与blocks有何不同(在使用方面)为什么一个人可能更喜欢另一个?谢谢。 最佳答案 thereisaashortsyntaxwithC++0xlambdastotakeeveryvariableinscopebyreference.([&])Thetypeofalambdaisalsounspecified,allowingpotentiallymoreoptimalcode.Now,whenyoulookatAppleblocks,itwillrequire__bl

c++ - g++ 和 c++0x 规范支持

虽然有人说g++中对c++0x新特性的支持处于实验模式,但许多gcc开发者声称你可以在你的代码中使用大部分新特性并让程序运行。但是当我尝试编译这个简单的程序时,它会导致段错误。为什么?#include#includevoidmy_thread_func(){std::coutg++-std=c++0x-Wall-orunmain.cc 最佳答案 我将可执行文件与pthread库链接起来,它工作了!我没有看到任何丢失的共享库依赖项(ldd),但似乎Linux上的stdC++库实现在内部使用了pthread。g++thread.cpp-

c++ - C++0x 中 allocator_traits<T> 的目的是什么?

为什么没有标准C++03接口(interface)用于查询C++0x中使用的分配器的成员类型?成员类型不足的用例有哪些? 最佳答案 为了从设计模式的角度解释allocator_traits,它是Adapter包装满足更少实现要求的自定义分配器(不需要构造,销毁,所有那些typedef...)并将其转换为FlyWeight使用静态成员和类型为您完成分配器实现要求的其余部分的对象。根据open-stddocScopedAllocatorModel的第3页,使用allocator_traits,您只需为自定义分配器提供至少10行代码。(感

c++ - 使用和不使用 std=c++0x 混合库的任何问题

我正在编写一个库,该库必须依赖于当前未编译并支持新标准的库。我想编译一个必须依赖于std=c++0x的库。这样做有什么问题吗? 最佳答案 如果混合使用不同编译器选项编译的库,则必须确保接口(interface)中数据类型的ABI相同。有些数据类型(如std::string)在C++03和C++0x之间有不同的接口(interface)和要求,所以使用它们的接口(interface)一定要小心。如果您的接口(interface)仅使用内置类型和您自己的类,而这些本身不使用任何标准库类,那么一切都应该没问题。否则,您将需要检查您正在使用

c++ - 一旦 C++0x 成为主流,boost 的重叠部分会发生什么?

一旦C++0x成为主流,boost的重叠部分会发生什么?boost是否仍会包含以前的所有内容,或者他们是否会调整库以使用新的std::内容对其进行更新?boost是否会同时拥有正常的c++版本和他们将维护的c++0x版本? 最佳答案 出于几个原因,人们会希望Boost继续支持现有的类。首先,有一段代码使用了Boost中的重叠特性,需要在一段时间内得到支持。其次,重叠的实现让我可以选择我更喜欢使用哪一个。std::Frob和Boost::Frob之间可能存在一些对我的项目很重要的区别,并且有选择是好的。不过,从长远来看,我希望应用程序

c++ - 在 C++0x lambda 中是否可以看到函数局部类型定义?

我遇到了一个奇怪的问题。以下简化代码重现了MSVC2010中的问题:templatestructdummy{staticTfoo(void){returnT();}};intmain(void){typedefdummydummy_type;autox=[]{boolb=dummy_type::foo();};//autox=[]{boolb=dummy::foo();};//works}我在函数中本地创建的typedef在lambda中似乎不可见。如果我将typedef替换为实际类型,它会按预期工作。这里有一些其他的测试用例://crashesthecompiler,creditto

c++ - C++0x 中的栅栏,一般只保证原子或内存

C++0xdraft有一个栅栏的概念,这似乎与CPU/芯片级别的栅栏概念非常不同,或者说linux内核人员对fences的期望.问题是草案是否真的暗示了一个极其受限的模型,或者措辞很差,实际上暗示了真正的围栏。例如,在29.8Fences下,它声明如下:AreleasefenceAsynchronizeswithanacquirefenceBifthereexistatomicoperationsXandY,bothoperatingonsomeatomicobjectM,suchthatAissequencedbeforeX,XmodifiesM,YissequencedbeforeB

c++ - _1 是 C++0x 的一部分吗?

我见过two最近answers使用_1作为纯C++0x解决方案(没有明确提及boostlambda)。有没有像std::_1这样的动物?我认为拥有原生lambda会使这样的构造变得多余。std::_1的Google代码搜索结果为tworesults来自同一个项目,因此尚无定论。 最佳答案 是的,它们是std::placeholders命名空间内C++0x的一部分,来自最新草案(n3126)§20.8.10.1.3“Placeholders”:namespacestd{namespaceplaceholders{//Mistheimp

C++0x 与 Qt Creator

我正在尝试使用QtCreator中的新C++0x功能在Windows下(QtCreator2.0.1)。我读了线程ConfiguringtheGCCcompilerswitchesinQt,QtCreator,andQMake并将QMAKE_CXXFLAGS+=-std=c++0x添加到.pro文件中。QtCreator在这个简单的代码上给了我非常奇怪的错误:#includeintmain(){}编译器错误:'::swprintf'hasnotbeendeclared'::vswprintf'hasnotbeendeclared我尝试使用命令g++test.cpp--std=c++0x

c++ - 谁能解释当前 C++0x 标准草案的这一段?

谁能解释ISON3242的这句话?§3.2,第二点Anexpressionispotentiallyevaluatedunlessitisanunevaluatedoperand(Clause5)orasubexpressionthereof.Avariableornon-overloadedfunctionwhosenameappearsasapotentially-evaluatedexpressionisodr-usedunlessitisanobjectthatsatisfiestherequirementsforappearinginaconstantexpression(5