草庐IT

compound-operator

全部标签

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++ - 如何使用 QVector at 或 operator[] 获取指向元素的指针

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

c++ - 为什么 'operator<<(cout, double)' 不起作用?

我正在研究重载运算符。我不明白使用之间的区别-double上的运算符(operator)/一个std::string.intmain(){doublea=12;strings="example";operator为什么不是operator和cout.operator工作? 最佳答案 因为该运算符被定义为成员函数,而不是自由函数。运算符可以通过这两种方式重载,当与常规运算符语法一起使用时,这对用户来说是透明的。但是,当使用显式语法时,您必须使用特定于实际函数定义的语法。此示例显示了实践中的差异:classStream{Stream&o

c++ - 为什么 std::map::operator[] 如此违反直觉?

在我看来,通常用于访问数据结构的运算符突然被定义为将数据插入数据结构,这在我看来是“邪恶的”(在C++FAQ中这个词的含义)。我想问题是“什么会更好”?对于某些类型的映射值,这个问题很容易回答;例如,如果我们将键映射到指针,您可能真的希望operator[]为不存在的键返回nullptr,但这显然不适用于其他类型。它可以在不存在的键上抛出异常,或者甚至默认构造一个临时的并返回它而不将它添加到映射中。对于这种容器类型,将[]从读取语义转换为写入语义的充分理由是什么? 最佳答案 基本问题是没有可靠区分的句法方式:dosomething(

c++ - 使用 operator<<? 根据某些条件打印不同类型的不同值

假设我想打印数字参数(如果它们>1)或“无”(如果它们cout1)cout但我无法链接运算符(operator)。理想情况下,我希望能够执行以下操作:cout1?argc-1:"none"但这是不可能的,因为三元if的类型不同。想法? 最佳答案 简单的方法。用字符串处理。std::cout1?std::to_string(argc-1):"none")更改字符串会产生一些多余的成本。但是如果使用一次就容易阅读和维护。需要括号的原因是移位运算符()。 关于c++-使用operator