2

这段代码看起来很奇怪:

const double square(double x) {

    return x*x;

}

常识告诉我,const在这种情况下意味着要么

  • 该函数返回一个const double

或者

  • 它承诺不会改变double传入的值。但它是按值传入的!我不明白

或者

  • 我知道const member functions承诺不会改变*this,但这甚至不是成员函数。

编辑

const double如果您可以将结果保存在非const变量中并进行编辑,那么返回 a 有什么意义?

double var = square(4.5); // no compile error

var = 0.3;
4

5 回答 5

4

真奇怪。正如你所说:

该函数返回一个const double

对于用户定义的类型,这将阻止您修改返回值:

square(2) += 5; // Error

double但是,正如评论中所指出的,无论如何,这对于内置类型是不允许的。即使对于用户定义的类型,虽然您可能不想编写这样的代码,但也没有必要阻止它。

对于更复杂的类型,返回一个const值实际上是有害的:它禁止移动语义,因为const无法移动对象。这可能会损害性能。

于 2013-08-09T08:36:39.617 回答
0

那不是“常量函数”。它是一个返回值的函数const。“const 函数”仅适用于成员函数,然后是参数列表之后const右侧。

这对于简单值类型的效用是可疑的。但是,如果您要返回对引用constconst指针或其他内容的引用,那么它可能有优点。

按值返回简单类型的 a 的唯一const作用是确保它不能被constC++11 中的非 r 值引用捕获。否则,他们只会复制价值并继续前进。

于 2013-08-09T08:34:39.353 回答
0

在您给出的示例中,对于任何 POD 类型,它几乎没有意义,但对于更复杂的类型,它可能是有意义的:-

const SomeClass &SomeFunction ();

它返回对 const 对象的引用。

于 2013-08-09T08:34:43.187 回答
0

在返回值之前带有 const 的 const 函数通常用于函数返回指针(或者可能是引用)以表示它只会返回 const 指针。这个返回一个双精度数,这意味着它只返回常量双精度数。

于 2013-08-09T08:36:20.080 回答
-1

它返回一个 const 双精度类型变量。

如果您这样做,如果您尝试将返回的值分配给 double 类型,大多数编译器都会发出警告。

于 2013-08-09T08:35:15.027 回答