C ++引用和返回值

鲍勃·萨卡门托

我遇到以下代码:

class MyClass {

// various stuff including ...
   double *myarray;

   double &operator() (const int n){
      return myarray[n];
   }
   double operator() (const int n) const {
      return myarray[n];
   }

// various other stuff ...
}

那么“()”的两个重载的实际区别是什么?我的意思是,我知道“第一个返回对double的引用,第二个返回对double的引用”,但这实际上意味着什么?我什么时候使用一个,什么时候使用另一个?第二个(返回双精度)看起来非常安全和直接。第一个以某种方式危险吗?

马辛尼

它们的不同之处在于,第一个允许您修改数组元素,而第二个仅返回值,因此您可以:

使用:double&operator()

MyClass mm;
mm(1) = 12;

但是也:

std::cout << mm(1);

使用:double运算符()

// mm(1) = 12; // this does not compile
std::cout << mm(1); // this is ok

同样,使用时operator[](例如使用)时,返回引用更为常见std::vector::operator[]

顺便提一句。通常有两个版本的operator()-一个常量和第二个非常量。const版本将在const对象上调用,而第二个版本将在非const对象上调用。但通常他们的签名是:

double& operator() (const int n);
const double& operator() (const int n) const;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++返回值,引用,常量引用

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

在C ++中通过引用返回值

来自分类Dev

构造函数和返回值优化(rvo)中的C ++通用引用

来自分类Dev

绑定到参数和返回值const引用的C ++临时对象

来自分类Dev

C堆/堆栈和函数返回值

来自分类Dev

返回值优化和C语言中的复制省略

来自分类Dev

区分C中的返回值和错误

来自分类Dev

自动返回值推断和C ++静态类型

来自分类Dev

c-read()和fread()返回值

来自分类Dev

C堆/堆栈和函数返回值

来自分类Dev

C#延迟评估和返回值

来自分类Dev

C ++ RapidJSON返回值

来自分类Dev

C ++中的返回值

来自分类Dev

带有引用的无效函数与在C ++中返回值的函数

来自分类Dev

C ++中的函数如何以最少的复制量返回值或引用?

来自分类Dev

通过将返回值绑定到const引用来提高C ++性能

来自分类Dev

C ++中的函数如何以最少的复制量返回值或引用?

来自分类Dev

在C ++中创建具有按引用调用返回值的类函数

来自分类Dev

返回值(引用,指针和对象)

来自分类Dev

由于C ++具有const引用,为什么我还应该按值返回值?

来自分类Dev

如何在x86-64上的C和C ++中优化函数返回值?

来自分类Dev

C和C ++中sizeof()运算符的返回值

来自分类Dev

获取C XOR返回值

来自分类Dev

C#BHO从Javascript返回值

来自分类Dev

从C ++ 11中的线程返回值

来自分类Dev

了解C#中的返回值

来自分类Dev

C printf()不返回值

来自分类Dev

如何从C宏返回值?