相关疑难解决方法(0)

运算符重载的基本规则和习惯用法是什么?

注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案索引,它们是最有意义的顺序:

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)

c++ operator-overloading operators c++-faq

2074
推荐指数
8
解决办法
88万
查看次数

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

前缀/后缀增量运算符

我想确保我理解按值传递和正确传递.特别是,我正在查看++对象的增量运算符的前缀/后缀版本.

我们假设我们有以下课程X:

class X{
private:
    int i;
public:
 X(){i=0;}
 X& operator ++ (){ ++i; return *this; } //prefix increment

 X operator ++ (int unused){ //postfix increment
  X ret(*this);
  i++;
  return ret;
 }

 operator int(){ return i; } //int cast
};
Run Code Online (Sandbox Code Playgroud)

首先,我是否正确实现了前缀/后缀增量运算符?

第二,与前缀运算符相比,后缀运算符的内存效率如何?具体来说,X当使用每个版本的运算符时,会创建多少个对象副本?

准确地解释通过引用返回和按值返回会发生什么可能有助于我理解.


编辑:例如,使用以下代码...

X a;
X b=a++;
Run Code Online (Sandbox Code Playgroud)

... a和b现在是别名吗?

c++ increment return-by-reference

21
推荐指数
2
解决办法
2万
查看次数

为什么后缀增量运算符采用伪参数?

看看这些功能签名:

 class Number {
 public:
   Number& operator++ ();    // prefix ++
   Number  operator++ (int); // postfix ++
 }; 
Run Code Online (Sandbox Code Playgroud)

前缀不带任何参数,但后缀确实如此.为什么?我认为我们可以用不同的返回类型识别它们.

c++ language-design operator-overloading prefix postfix-operator

20
推荐指数
3
解决办法
9559
查看次数

在重载预增量运算符时,是否必须返回对象的引用?

我可以用吗:

MyClass& MyClass::operator++ () {
    a++;  // private var of MyClass
    return (*this);
}
Run Code Online (Sandbox Code Playgroud)

或者它可以是:

MyClass MyClass::operator++ ();
Run Code Online (Sandbox Code Playgroud)

有什么不同?


谢谢你的回答.我有另一个问题.

很多人都这样做:

MyClass& MyClass::operator++();
MyClass MyClass::operator++(int);
Run Code Online (Sandbox Code Playgroud)

这不合逻辑吗?如果可以,请举一些例子.

我知道第一个版本是预增量,第二个版本是后增量,但我问为什么第一个版本返回引用而第二个版本没有?它在相同的代码(类)中,并且使用相同的代码.

c++ function operator-overloading

8
推荐指数
1
解决办法
1万
查看次数

Operator ++:引用vs值返回和未使用的参数

我看到这个C++代码是一个更大的例子的一部分:

Date &Date::operator++()
{
    helpIncrement();
    return *this;
}

Date Date::operator++( int )
{
    Date temp = *this;
    helpIncrement();
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

首先,如果Date temp = *this,那么我不明白为什么这两个函数的返回类型是不同的?一个返回*this,另一个返回temp,分配给*this

其次,为什么第二个函数的参数没有变量名?

c++ reference operator-overloading increment

2
推荐指数
1
解决办法
510
查看次数