草庐IT

C++0x decltype 和范围解析运算符

使用诸如Foo之类的类:structFoo{staticconstinti=9;};我发现GCC4.5会拒绝以下内容Foof;intx=decltype(f)::i;如果我使用中间类型定义,它将起作用,例如:typedefdecltype(f)ftype;intx=ftype::i;但我更喜欢保持命名空间干净。我认为优先级可能是一个问题,所以我也尝试了括号,但没有运气。是不可能的,还是有什么语法可以帮助我? 最佳答案 说decltype(f)::i是有效的C++0x。GCC只是还不支持它。您可以使用身份模板解决它templatest

C++0x 右值引用和临时对象

(我在comp.std.c++上问了这个问题的一个变体,但没有得到答案。)为什么这段代码中对f(arg)的调用会调用f的constref重载?voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}我的直觉说应该选择f(string&&)重载,因为arg无论如何都需要转换为临时的,而临时匹配右值引用比左值引用更好。这不是在GCC和MSVC中发生的(编辑:感谢Sumant:它不会在GCC4.3-4.5中发生)。至少在G++和MSVC中,

c++ - boost 或 C++0x 中的任何 RAII 模板

RAII的boost中是否有可用的模板。有像scoped_ptr、shared_ptr这样的类,它们基本上都在指针上工作。这些类可以用于指针以外的任何其他资源。是否有任何模板可以与通用资源一起使用。以某个在作用域开始时获取的资源为例,必须在作用域结束时以某种方式释放。获取和释放都需要一些步骤。我们可以编写一个模板,它需要两个(或者可能是一个对象)仿函数来完成这项任务。我还没有想过如何实现这一点,我只是想知道是否有任何现有的方法可以做到这一点编辑:一个支持lambda函数的C++0x怎么样 最佳答案 shared_ptr提供了指定cu

c++ - 此代码旨在输出 Hello World。但它输出 0x22fed8

我正在学习C++中的文件处理,但是这里有一个问题。我正在尝试读取文件。此代码旨在输出HelloWorld。但它输出0x22fed8。#include#includeusingnamespacestd;intmain(){fstreamfile;file.open("test.txt",ios::in|ios::out);file我做错了什么? 最佳答案 简单的解决方案正如其他人所指出的,直接将文件打印到流中是行不通的。打印文件内容需要打开另一个从文件读取的流,或者将流的读取指针重新设置为开头,然后再次读取整个文件(如其他人所示)。C

c++ - 在 c++0x 中使用 __thread

我读到C++中有一个新关键字:它是我读过的__thread。我只知道它是一个可以像static关键字一样使用的关键字,但我什么都不知道。这个关键字是否仅仅意味着,例如,如果一个变量是这样声明的:__threadintfoo;那么与该变量有关的任何事情都将使用新线程执行? 最佳答案 它是thread_local,而不是__thread。用于定义具有线程存储时长的变量。thread_local是在C++0x中添加的new存储持续时间说明符。还有其他存储时长:static、automatic和dynamic。来自thislink:thre

c++ - 抛出 C++0x 异常的代价

在C++0x中抛出异常对性能有何影响?这个编译器依赖多少?这和问whatisthecostofenteringatryblock,evenifnoexceptionisthrown不一样.我们是否应该期望像在Java中那样将异常更多地用于一般逻辑处理? 最佳答案 #include#includestructSpaceWaster{SpaceWaster(intl,SpaceWaster*p):level(l),prev(p){}//wewantthedestructortodosomething~SpaceWaster(){prev

C++0x 与 using 声明的混淆

这种情况应该怎么办:structA{voidf();};structB:virtualA{usingA::f;};structC:virtualA{usingA::f;};structD:B,C{voidg(){f();}};感兴趣的行是f()。显然根据FDIS的10.2查找f成功,找到A::f。但是,重载决议会考虑哪些候选人?规范在13.3.1p4中说:Fornon-conversionfunctionsintroducedbyausing-declarationintoaderivedclass,thefunctionisconsideredtobeamemberofthederi

c++ - 跨 C++0x 编译器的 lambda 特征不一致

我观察到两个编译器(g++4.5、VS2010RC)在将lambdas与类模板的部分特化匹配的方式上存在一些不一致。我试图为lambdas实现类似boost::function_types的东西来提取类型特征。查看this了解更多详情。在g++4.5中,lambda的operator()的类型似乎类似于独立函数(R(*)(...))的类型,而在VS2010RC中,它看起来就像一个成员函数(R(C::*)(...))。所以问题是编译器编写者可以自由地解释他们想要的任何方式吗?如果不是,哪个编译器是正确的?请参阅下面的详细信息。templatestructfunction_traits:f

c++0x : resolving ambiguity between function-definition followed by empty-declaration and simple-declaration

我在思考c++0x规范中明显的歧义时遇到了问题,另请参阅:http://www.nongnu.org/hcb/假设我们有代码voidfoo(){};我个人将代码解释为function-definition后跟empty-declaration。但是,看看语法规范,我想说这可以很容易地解释为simple-declaration,它是block-declaration的一部分,因此被提及declaration列表中的较早...这是我对如何将其解析为简单声明的解释:voidfoo(){};"->简单声明void->decl-specifier-seq->decl-specifier->typ

c++ - 关于 C++0x,我需要了解什么?

这个问题在这里已经有了答案:关闭12年前.PossibleDuplicate:WherecanIlearnmoreaboutC++0x?我对C++03相当熟悉,但我仍然需要熟悉C++0x,所以我想阅读一些关于C++0x的相当易懂的信息。我看过Wikipedia但我正在寻找更具可读性的东西。那么有没有一本书或一系列博客文章很好地介绍了Material? 最佳答案 这个网站上有很多东西-有些帖子包含非常丰富的讨论。我会把你指向谷歌,但在C++0xtaggedposts中搜索会更有效率。在这里海事组织。这里是agoodone开始,其中包括