草庐IT

Operators

全部标签

c++ - 运算符优先级(bool 之前是否为 void*?)

回答thisquestion时我做了一些让我很困惑的研究。我注意到两个成功打开的ifstreams不相等,但两个失败的ifstreams相等。起初我检查了cplusplus.com。operator!返回badbit和failbit的状态。我认为与此相反的仍然是返回这两位的状态,但是翻转了。错误,因为两次成功调用不相等。然后我认为它是某个地方的operatorbool会返回一些东西。所以我试图从ifstream回溯并找到istream::operatorbool(),它正在返回_Ok。但还是错了,这似乎根本没有被调用(也不可能,因为两次成功的调用仍然不相等)。所以我改变了方法并检查了V

c++ - C++中运算符的函数指针

所以我有一个函数需要一个函数指针作为输入,它的原型(prototype)是这样的:intfunction(int(*op)(int,int));我想知道是否可以为该函数指针传递一个运算符。特别是这个内置运算符:intoperator|(int,int);我已经试过了:function(&(operator|));得到了这样的错误:error:nomatchingfunctionforcallto'function()'我已经试过了:function(&(operator|(int,int)));得到了这样的错误:error:expectedprimary-expressionbefor

c++ - 在哪里可以找到运算符重载列表?

在哪里可以找到所有运算符重载的函数签名列表? 最佳答案 维基百科:OperatorsinCandC++. 关于c++-在哪里可以找到运算符重载列表?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3858675/

c++ - C++ 中 += 和 =+ 的区别

在使用C++编程时,我经常混淆“+=”和“=+”,前者是我真正指的运算符。VisualStudio似乎接受两者,但它们的行为不同并且是我的许多错误的来源。我知道a+=b在语义上等同于a=a+b,但是“=+”有什么作用? 最佳答案 =+实际上是=+(赋值和一元+运算符)。为了帮助您记住+=,请记住它先做加法,再做赋值。当然这取决于实际的实现,但它应该是针对原语的。 关于c++-C++中+=和=+的区别,我们在StackOverflow上找到一个类似的问题: ht

c++ - 为什么编译器不执行类型转换?

考虑以下代码。#include#includestructSimpleStruct{operatorstd::string(){returnvalue;}std::stringvalue;};intmain(){std::strings;//Anemptystring.SimpleStructx;//x.valueconstructedasanemptystring.boolless=s此代码无法在g++或MicrosoftVisualC++上编译。编译器给出的错误报告是nomatchforoperator'.问题是为什么编译器不简单地转换SimpleStructx至string根据给

c++ - 运算符重载决议如何在 namespace 内工作?

我发现C++运算符重载解析的奇怪行为,我自己无法解释。指向描述它的某些资源的指针与答案一样好。我有2个翻译单元。在一个(称为util.cpp/h)中,我声明并定义了两个运算符(我省略了可读性的实际实现,无论如何都会出现问题)://util.h#ifndefGUARD_UTIL#defineGUARD_UTIL#includestd::istream&operator>>(std::istream&is,constchar*str);std::istream&operator>>(std::istream&is,char*str);#endif和://util.cpp#include"u

c++ - 使用前缀或后缀递增(或递减)

我发现这段代码是C++书籍(C++入门,第5版)中逗号运算符用法的示例:vector::size_typecnt=ivec.size();//assignvaluesfromsize...1totheelementsinivecfor(vector::size_typeix=0;ix!=ivec.size();++ix,--cnt)ivec[ix]=cnt;我认为这不是一个合适的例子,因为orderofevalation副作用在这里并不重要。逗号运算符仅允许分隔增量和减量表达式,这是逗号运算符的常见用法,但不是本书本节的意图。更好的example显示在cppreference.com(

c++ - Visual C++ - 显式调用基本类型的转换运算符

我正在研究一个Foo类,它定义了一个隐式的operatorbool()。我使用Foo作为几个函数的返回类型,所以我可以获得有关已完成的操作的信息并调用Foo::operatorbool()来获取是否操作已成功执行。出于好奇,我还尝试在使用Foo时显式调用转换运算符:if(!func().operatorbool())//funcreturnedFoothrowstd::logic_error("operationwasnotsuccessful");效果很好。然后,我突然决定转储Foo类并使用简单的bool但我忘了删除.operatorbool()函数调用返回值。因此我发现了一组Vis

运算符的 C++ 链接 << for std::cout like usage

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:std::endlisofunknowntypewhenoverloadingoperatorOperatoroverloading我目前正在编写一个记录器类,但是operator方法导致编译器错误。这是该类的最小化版本,位于文件“logger.h”中:#includeclassLogger{public:Logger():m_file(std::cout){}templateLogger&operator它包含在我的main.cpp中,当我输出字符串文字时它可以完美地工作:log但是,下面的代码不会编译。#

c++ - 对运算符<< 的 undefined reference

我有一个常规类(不是模板)和一个私有(private)friend操作符它的声明是:std::ostream&operator在cpp文件中它的定义是:std::ostream&operator它正在被编译然后链接到使用它的主函数,但是当我使用它时我得到一个undefinedreference...然而,当我将定义添加到主cpp文件的顶部并删除友元声明时,它工作正常...这是我在主要功能中使用它的方式std::coutgetPosition()不多也不少...这是链接器错误/home/luke/Desktop/pathfinder/parse_world.cpp:34:undefine