“const”函数有什么用? [重复]

问题描述 投票:0回答:5

这段代码看起来很奇怪:

const double square(double x) {

    return x*x;

}

常识告诉我,

const
在这种情况下意味着

  • 该函数返回一个
    const double

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

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

编辑

如果可以将结果保存在非

const double
变量中并进行编辑,那么返回
const
有什么意义呢??

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

var = 0.3;
c++ function constants function-qualifier
5个回答
4
投票

这很奇怪。正如你所说:

该函数返回一个

const double

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

square(2) += 5; // Error

尽管如此,正如评论中所指出的,无论如何,对于像

double
这样的内置类型来说,这是不允许的。即使对于用户定义的类型,虽然您可能不想编写这样的代码,但也没有必要阻止它。

对于更复杂的类型,返回

const
值实际上可能是有害的:它会抑制移动语义,因为无法移动
const
对象。这可能会损害性能。


0
投票

这不是一个“const 函数”。它是一个返回值

const
的函数。 “const 函数”仅适用于成员函数,然后
const
位于参数列表后面的 right 上。

对于简单值类型来说,它的实用性是值得怀疑的。但是,如果您返回对

const
const
指针或其他内容的引用,那么它可能有优点。

按值返回简单类型的

const
的唯一作用是确保它不能被 C++11 中的非
const
r 值引用捕获。否则,他们只会复制该值并继续前进。


0
投票

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

const SomeClass &SomeFunction ();

返回对 const 对象的引用。


0
投票

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


-1
投票

它返回一个 const double 类型变量。

如果你这样做,当你尝试将返回值分配给双精度类型时,大多数编译器都会发出警告。

© www.soinside.com 2019 - 2024. All rights reserved.