binary-arithmetic-operations
全部标签 我正在研究重载运算符。我不明白使用之间的区别-double上的运算符(operator)/一个std::string.intmain(){doublea=12;strings="example";operator为什么不是operator和cout.operator工作? 最佳答案 因为该运算符被定义为成员函数,而不是自由函数。运算符可以通过这两种方式重载,当与常规运算符语法一起使用时,这对用户来说是透明的。但是,当使用显式语法时,您必须使用特定于实际函数定义的语法。此示例显示了实践中的差异:classStream{Stream&o
在我看来,通常用于访问数据结构的运算符突然被定义为将数据插入数据结构,这在我看来是“邪恶的”(在C++FAQ中这个词的含义)。我想问题是“什么会更好”?对于某些类型的映射值,这个问题很容易回答;例如,如果我们将键映射到指针,您可能真的希望operator[]为不存在的键返回nullptr,但这显然不适用于其他类型。它可以在不存在的键上抛出异常,或者甚至默认构造一个临时的并返回它而不将它添加到映射中。对于这种容器类型,将[]从读取语义转换为写入语义的充分理由是什么? 最佳答案 基本问题是没有可靠区分的句法方式:dosomething(
假设我想打印数字参数(如果它们>1)或“无”(如果它们cout1)cout但我无法链接运算符(operator)。理想情况下,我希望能够执行以下操作:cout1?argc-1:"none"但这是不可能的,因为三元if的类型不同。想法? 最佳答案 简单的方法。用字符串处理。std::cout1?std::to_string(argc-1):"none")更改字符串会产生一些多余的成本。但是如果使用一次就容易阅读和维护。需要括号的原因是移位运算符()。 关于c++-使用operator
此代码可在CodeGear2009和VisualStudio2010中编译,但不能在gcc中编译。为什么?classFoo{public:operatorint()const;templateTget()const{returnthis->operatorT();}};Foo::operatorint()const{return5;}错误信息是:test.cpp:在成员函数`TFoo::get()const'中:test.cpp:6:错误:“constclassFoo”没有名为“operatorT”的成员 最佳答案 这是G++中的错
如果objp是指针,是否有比调用objp->operator()(x,y,z)更好的语法?&objp(x,y,z)不起作用。由于所有的符号,这很难用谷歌搜索。抱歉,这很愚蠢。 最佳答案 您可以使用(*objp)(x,y,z);作为替代。 关于c++-替代->operator(),我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/31757675/
我正在用这样的const引用编写类:classB;classfoo{constB&b;foo(constB&newb):b(newb){}voidoperator=(constfoo&foo2){//Thisdoesnotworkfoo.b=foo2.b;}};我正在尝试定义一个有效的运算符=显然=不起作用,因为不允许我更改const引用。这有办法让引用指向另一个对象吗?如果b不是const,C++将为我提供一个有效的operator=。如果我将一个成员定义为constcl将吐出:警告C4512:“foo”:无法生成赋值运算符 最佳答案
voidGetarrayElements(inta[]){intk=0;while(true){cout>a[k]>>endl;if(a[k]=0){k+=1;}else{break;}}}我试图将0到100之间的一些输入值读入一个数组,但我收到了这个错误。“不匹配运算符>>”。有什么问题吗? 最佳答案 endl只能应用于cout等输出流;你不能在cin上使用它。 关于c++-我在以下函数中收到错误nomatchforoperator>>。怎么了?,我们在StackOverflow上找到
我正在编写一个比较std::strings的模板类函数。std::string是模板参数。我的问题是我无法用“==”运算符比较两个const字符串,然后我想我创建了两个非常量临时字符串变量来执行比较,但它仍然无法编译。不知道为什么。类VGraph被实例化为VGraphmyGraph;templatesize_tVGraph::find(constV&vert){Vtemp=vert;//(1)for(size_ti=0;i相关函数原型(prototype)templateconstV&VVertex::getVertex(); 最佳答案
我有一个10123X123456形式的字符串值,其中10是年份,123是一年中的第几天,其余的是独特的系统生成的东西。在某些情况下,我需要将400添加到天数,例如上面的数字将变为10523X123456。我的第一个想法是对这三个字符进行子字符串化,将它们转换为整数,再加上400,然后将它们转换回字符串,然后对原始字符串调用replace。行得通。但后来我想到,我真正需要更改的唯一字符是第三个字符,并且原始值始终为0-3,因此永远不会出现任何“携带”问题。我进一步想到数字的ASCII代码点是连续的,因此将数字4添加到字符“0”,例如,将得到“4”,等等。这就是我最终所做的。我的问题是,有
在我的C++代码中,我不断地将不同的值写入文件。我的问题是,考虑到文件已成功打开这一事实,如果在任何情况下write或 最佳答案 失败原因太多,无法一一列举。可能的是:分区终于满了用户超出了他的磁盘配额分区已被粗暴地卸载分区已损坏(文件系统错误)磁盘发生物理故障...DoIneedtocheckeverysinglecallofwriteor如果您希望您的程序对故障具有弹性,那么肯定会。如果您不这样做,则仅表示您正在写入的数据可能会或可能不会被写入,这等于说您不关心它。注意:您可以设置std::ostream::exceptions