草庐IT

conditional-operator

全部标签

c++ - 如果重载 operator== 是否还需要重载 operator!=?

我正在使用BOOST_STRONG_TYPEDEF宏,它创建了一个重载operator==的类。我想知道是否还需要重载operator!=? 最佳答案 回答:没有!原因(一开始我没有注意到)是BOOST_STRONG_TYPEDEF使用了Boost运算符(http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm),特别是totally_ordered1和totally_ordered2。因此,小于和相等比较运算符已为您实现。

c++ - 这是 std::bitset::operator^= 和 std::bitset::count 的正常行为吗?如果是这样,为什么?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion记录在案here,std::bitset::operator^=返回*this。从这一点以及对诸如+=,|=,*=等运算符的“通常”解释,我们可以合理地假设给定的std::bitset实例(相同size)a和b,表达式(a^=b).count()将存储按位XOR的结果a中的操作,count()将返回

c++ - std::vector::insert 与 std::list::operator[]

我知道std::list::operator[]没有实现,因为它的性能很差。但是std::vector::insert和std::list::operator[]一样低效。背后的解释是什么? 最佳答案 std::vector::insert的实现是因为std::vector必须满足SequenceContainerconcept的要求,虽然operator[]不是任何概念(据我所知)所必需的,但可能会在c++17的ContiguousContainer概念中添加。所以operator[]被添加到可以像数组一样使用的容器中,而inse

c++ - 为什么 {} 用于访问 std::hash 中的 operator()?

在阅读用于std::unordered_map的std::hash示例时,我注意到{}正在访问operator()函数。http://en.cppreference.com/w/cpp/utility/hashresult_typeoperator()(argument_typeconst&s)const{result_typeconsth1(std::hash{}(s.first_name));result_typeconsth2(std::hash{}(s.last_name));returnh1^(h2这里使用{}代表什么? 最佳答案

c++ - 如何避免 C++ 中 operator== 实现的错误?

我经常有提供简单的逐个成员比较的类:classApplicationSettings{public:booloperator==(constApplicationSettings&other)const;booloperator!=(constApplicationSettings&other)const;private:SkinTypem_ApplicationSkin;UpdateCheckIntervalm_IntervalForUpdateChecks;boolm_bDockSelectionWidget;//Addfuturememberstooperator==};bool

c++ - 为什么我可以在临时 std::ofstream 对象上使用 `operator<<`?

根据C++标准,您不能将临时变量绑定(bind)到非常量引用。由于流输出操作符定义为templatestd::basic_ostream&operator&os,conststd::basic_string&str);我希望它不能在临时流对象上调用。然而,我尝试了以下并得到了意想不到的结果#includestd::ostream&print(std::ostream&stream){stream这在GCC主干、Clang主干和MSVC19上编译。我什至在前两个上尝试了-pedantic-errors。虽然从技术上讲这三者都错了,但我很可能误解了什么。有人可以在标准中找到关于这是否合法的

c++ - Operator() 的部分特化

我的一个类声明了一个模板函数:templateAdo_something(conststd::vector&data)我想部分专注于typenameA。B是一个类型家族,实现了一个非常小的接口(interface),我们经常使用它们,所以我希望我的特化在B上是通用的。我怀疑这是双重烦恼,因为typenameA仅用作返回类型。从互联网上,我了解到我不能部分特化一个函数,所以我创建了一个类,如下所示:templateclassdo_something_implementation{public:do_something_implementation(conststd::vector&dat

c++ - 包含许多 "if"的关键循环,其输出为常量 : How to save on condition tests?

我的代码中有一个具有这种形状的关键循环:intmyloop(inta,.....){/*somestuff*///Criticalloopwhile(...){/*SomeStuff*/if(a==1){//.....}elseif(a==2){//.....}elseif(a==3){//.....}else{//....}}}由于循环永远不会触及“a”的值,所采用的分支永远不会改变,但由于这个循环真的很重,因此需要多次测试“a”的值,这是完全没有必要的。最好的办法可能是复制循环,这样就可以在循环开始之前测试“if”,但这意味着要复制两种情况下共有的很多东西,并且会导致代码非常难看.

c++ - std::conditional 编译时分支评估

编译这个:templatestructisSame{staticconstexprboolvalue=std::conditional::value,isSame,//Error!std::false_type>::type,std::is_same>::type::value;};intmain(){qDebug()::value;returnEXIT_SUCCESS;}给我这个编译器错误:error:wrongnumberoftemplatearguments(1,shouldbe2ormore)问题是isSame有一个空的Args参数包,所以isSame有效地变成isSame与签

c++ - 如何使用 QVector at 或 operator[] 获取指向元素的指针

我很想得到一个指向QVector元素的指针,这样我就可以在别处使用该对象,但是at()方法给了我一个constT&值和operator[]给我一个T&值。我对如何使用它们来获取指针感到困惑,以便我将使用相同的对象而不是使用复制构造函数。 最佳答案 AT&value不是拷贝,它是reference.引用看起来很像指针:它们很轻,可用于修改底层对象。只是,您使用它们的语法与直接对象相同(使用点而不是箭头),以及您可能希望在本文中查看的其他一些差异。要编辑当前在Vector中的对象,您可以使用例如vector[i].action();.这