草庐IT

has_ended

全部标签

c++ - 如何在过载时强制发出 "statement has no effect"警告==

在下面的例子中:classTest{public:Test(int_value){value=_value;};constbooloperator==(int_value)const{returnvalue==_value;};private:intvalue;};intmain(void){inta;a==1;Testb(1);b==1;return0;}编译给出以下内容:$g++-Wall-pedantic-otesttest.cca.cc:Infunction‘intmain()’:a.cc:13:7:warning:statementhasnoeffect[-Wunused-v

c++ - std::nth_element(a.begin(), a.end(), a.end()) 有什么作用?

我在http://www.sgi.com/tech/stl/nth_element.html阅读了std::nth_element的描述templatevoidnth_element(RandomAccessIteratorfirst,RandomAccessIteratornth,RandomAccessIteratorlast);注意前提是[first,nth)是一个有效范围。[nth,last)是一个有效范围。我的问题是:调用std::nth_element(a.begin(),a.end(),a.end())是否有效?如果有,它的作用是什么?无论如何,它不违反上述先决条件。语言

c++ - "xvalue has identity"是什么意思?

C++11引入了新的值类别,其中之一是xvalue.是explained由Stroustrup描述为类似(im类别):“它是一个值,具有身份,但可以从中move”。另一个来源,cppreference解释:aglvalueisanexpressionwhoseevaluationdeterminestheidentityofanobject,bit-field,orfunction;和xvalue是glvalue,所以这句话对于xvalue是正确的也是。现在,我认为如果xvalue有身份,那么我可以检查两个xvalues指的是同一个对象,所以我取xvalue的地址.事实证明,这是不允许

c++ - __has_trivial_copy 在 clang 和 gcc 中的行为不同。谁是对的?

std::is_trivially_copyable在这两个编译器中仍然不被支持(至少gcc4.6是这样)。但是两者都提供了做得很好的__has_trivial_copy指令。除非涉及到已删除的复制构造函数。structA{A(Aconst&)=delete;};__has_trivial_copy(A)在clang中返回1,在gcc中返回0。我正在研究标准,但找不到说明删除复制构造函数时类是否仍被视为可平凡复制的条款。谁是对的?我倾向于相信gcc是正确的,因为structA根本不可复制,更不用说可复制了。此外,有一个广泛的共识,即删除的复制构造函数可以被视为私有(private)声明

c++ - CPack DEB 生成器 : control-file-has-bad-permissions mdsums 0644 ! = 0644

我正在开发小型控制台应用程序,我正在尝试使用CPack创建Ubuntu包。Ubuntu版本是13.04,我的主要CPack文件在下面。软件包已正确创建,但在尝试使用图形界面(基本上是在Ubuntu中双击deb文件)安装时出现以下警告:Packageisofbadqualitycontrol-file-has-bad-permissionsmdsums0644!=0644有人知道这是什么原因吗?更重要的是,如何修复它?CMake版本是2.8.10.1,但我也尝试使用2.8.11.2,但没有任何变化。我看到,他们在这里遇到了类似的问题,但与fix的性质无关我的主要CPack文件:INCLU

c++ - 多个 va_end 调用的顺序是否重要?

我有以下代码:va_listva[2];va_start(va[0],fmt);va_start(va[1],fmt);process(fmt,va);va_end(va[0]);va_end(va[1]);我查看了各种站点以获取关于va_start和va_end的文档,他们只说va_end应该为每个调用va_start在调用函数返回之前。我不确定调用顺序是否重要。特别是,是va_end(va[0]);va_end(va[1]);在语义上与相同va_end(va[1]);va_end(va[0]);在上面的示例代码中? 最佳答案 C

c++ - SBRM/RAII 用于 std::va_list/va_start()/va_end 使用

我的代码包含如下片段:std::va_listap;va_start(ap,msgfmt);snprintf_bufbuf;consttchar*msg=buf.print_va_list(msgfmt,ap);va_end(ap);它们很短,va_start()和va_end()靠得很近,所以它们不是什么大问题。两者之间的调用异常可能是一个问题(或不是?)。简单测试表明,不允许从没有省略号的函数中调用va_start()。从与va_start()不同的函数调用va_end()是否允许?基本上,我很好奇是否可以对这些调用使用SBRM/RAII习惯用法,即使必须手动调用va_start(

C++ 继承 : Calling virtual method when it has been overridden

我正在尝试构建一个可以在单独的线程中运行(即执行它的run()函数)的service对象。这是服务对象#include#include#include#includeclassservice:publicboost::noncopyable{public:service():stop_(false),started_(false){}virtual~service(){stop();if(thread_.joinable()){thread_.join();}}virtualvoidstop(){stop_=true;}virtualvoidstart(){if(started_.lo

c++ - 重新定义 malloc/free with static linking has multiple definition error

我公司最近想把编译器从gcc-3.4更新到gcc-4.5。但是,我们客户的机器可能没有最新的libstdc++.so,所以我们想静态链接我们的二进制文件。我们的程序需要定制的malloc()/free()以满足非常高的性能要求。我修改了makefile,在链接时添加了一个-static,得到了以下错误信息:/usr/lib64/libc.a(malloc.o)(.text+0x18c0):Infunction`free'::multipledefinitionof`free'../../ic/src/memmgr/libmemmgr_mt_thread.a(memmgr_mt_thre

c++ - 在 vs2008 SP1 中禁用检查迭代器时出现问题 (_HAS_ITERATOR_DEBUGGING=0)

当我尝试禁用已检查的迭代器时,在Debug模式下运行vs2008SP1时遇到了一些问题。以下程序重现了该问题(字符串析构函数崩溃):#define_HAS_ITERATOR_DEBUGGING0#includeintdo_stuff(std::stringconst&text){std::string::const_iteratori(text.end());return0;}intmain(){std::ostringstreamos;os我找到了similarpost在gamdev.net上讨论了在vs2005中遇到这个问题。该帖子中的示例程序在2008SP1上按原样为我编译-但是