草庐IT

c++ - C++0x 是否允许在函数签名中使用 decltype()?

这个问题显然假设我们不想为这种类型使用模板(无论出于何种原因)。classProduct{public:Product(decltype(mPrice)price_,decltype(mLabel)label_)//1.:mPrice(price_),mLabel(label_){}decltype(mPrice)price()const{returnmPrice;}//2.decltype(mLabel)label()const{returnmLabel;}//2.private:floatmPrice;//typemightlaterbechangedtomoreacuratefl

c++ - g++ -std=c++0x 的意外编译问题

在使用g++-std=c++0x进行编译时,我遇到了一些编译问题,将类型T的元素推回vector。这是一个最小的例子:#includeusingnamespacestd;classA{public:A(){}A&operator=(A&orig){return*this;}};intmain(intargc,char**argv){Aa;vectorb;Ac=a;//Thisisfineb.push_back(a);//Thisisnot,butonlywhencompilingwith-std=c++0x!return0;}它用g++-Wall-pedantic编译得很好,但是当用g

c++ - 哪些 C++0x header 应该定义 nullptr?

现在C++0x即将面世,我一直在试验它,尤其是使用nullptr。如果需要使用它,我一直无法弄清楚应该包含哪些标准头文件。感谢任何帮助。 最佳答案 不需要header。它是一个内置关键字(§[lex.nullptr])。2.14.7Pointerliterals        [lex.nullptr]pointer-literal:    nullptr指针字面量是关键字nullptr.它是类型的纯右值std::nullptr_t.[注意:std::nullptr_t是一种独特的类型,既不是指针类型也不是指向成员的指针类型;相反,

C++0x 将不再有概念。意见?这将如何影响你?

在2009年7月C++0xmeetinginFrankfurt,决定removeconcepts来自C++0x。就个人而言,我很失望,但我宁愿有一个可实现的C++0x,也不愿没有C++0x。他们说他们将在以后添加。您对这个决定/问题有何看法?它将如何影响您? 最佳答案 就我个人而言,我对删除并不太不满意,因为概念的目的主要是改进编译时错误消息,正如概念提案的共同作者之一JeremySiek所写的(http://lambda-the-ultimate.org/node/3518#comment-50071):WhiletheConce

c++ - C、C++、C++0x、pthread 和 boost 中的线程

一个关于C/C++中线程的问题...C++0x语法#includevoiddummy(){}intmain(int,char*[]){std::threadx(dummy);std::thready(dummy);...return0;}有多少线程?两个(x和y)还是三个(x、y和主要)?我可以在main中调用this_thread::yield()吗?在main中调用this_thread::get_id()会得到什么?线程语法#includevoiddummy(){}intmain(int,char*[]){pthread_tx,y;pthread_create(&x,NULL,&

c++ - 手工自动模板(不使用C++0x)

如何在不使用c++0x标准的情况下实现auto关键字功能?for(std::deque>::iteratorit=points.begin();it!=points.end();++it){...}也许这样的类:classAUTO{public:templateAUTO(T1);templateoperatorT2();};这样的用法:for(AUTOit=points.begin();it!=points.end();++it){...}但是,T1和T2是不同的。如何将有关T1的信息移动到operatorT2()?真的可以吗? 最佳答案

c++ - C++0x lambda 和 operator()、闭包和仿函数之间的区别

我确信我了解了构造的一般要点,但我看不到它们在C++中的用途。我已经在SO和其他地方阅读过关于该主题的先前帖子,但我不明白为什么它们应该成为一种新的语言功能。我想回答的事情是这样lambda和接受函数/仿函数的模板参数有什么区别。闭包只是一个具有某些设置对象状态(作用域?)的仿函数吗?这些结构的“killer级应用”是什么?还是典型的用例? 最佳答案 Lambda实际上只是仿函数的语法糖。你可以自己做这一切:定义一个新类,创建成员变量来保存捕获的值和引用,将它们连接到构造函数中,编写operator()(),最后创建一个实例和通过它

c++ - C++0x RValue 引用或其他特性是否会对流性能产生影响?

大量分析表明,当需要性能(速度)时,C++流并不是执行文件或文本字符串操作的最佳方式。尽管如此,标准流仍然是保持类型安全的好方法。根据我的阅读,大部分问题是因为流实现必须1)创建/复制很多小对象2)不是完全通用的(不以相同的方式管理char和wchar?)等。无论如何,我在想也许某些C++0x允许实现者至少限制对象的创建/复制,也许还有其他功能可以实现其他性能改进,也许可以达到printf()的性能?是否有立竿见影的效果?还是我们必须等待新的实现?或者我们是否还需要一个新的(类似STL的)流库? 最佳答案 您可能对myquestio

c++ - 为什么在 C++0x 中有一个 sizeof... 运算符?

我看到@GMan实现了aversionofsizeof...对于可变参数模板,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则吗:preferlibrariestolanguageextensions? 最佳答案 来自VariadicTemplates(Revision3)(N2080=06-0150),第6页:Althoughnotstrictlynecessary(wecanimplementcountwithoutthisfeature),checkingthelengthofaparameterpacki

c++ - 如何中断等待的 C++0x 线程?

我正在考虑在我的应用程序中使用C++0x线程而不是Boost线程。但是,我不确定如何使用标准C++0x线程重新实现我所拥有的,因为它们似乎没有interrupt()方法。我当前的设置是:管理工作的主线程;执行主人命令的几个工作线程。Workers在至少两个不同的条件变量上调用wait()。Master有一个“超时”状态:在这种情况下,它告诉所有worker停止并给出他们当时得到的任何结果。使用Boost线程主控器只需在线程组上使用interrupt_all(),这会导致worker停止等待。如果他们此刻不在等待,master还会设置一个bool标记,worker会定期检查该标记。但是,