gpt4 book ai didi

c++ - 为什么我只能使用 auto 类型创建函数别名?

转载 作者:行者123 更新时间:2023-12-02 01:53:40 28 4
gpt4 key购买 nike

我在实用程序命名空间中定义了以下静态函数。

class InvalidDecimalPlace {};

namespace utilities
{
double static RoundToNthDecimalPlace(double number, int decimalPlace)
{
if (decimalPlace < 0 )
throw InvalidDecimalPlace();
else if (decimalPlace == 0)
return static_cast<int>(number);

int powerUp = std::pow(10, decimalPlace);
number *= powerUp;
int numberWithoutDecimals = static_cast<int>(number);
return numberWithoutDecimals / static_cast<double>(powerUp);

}
};

在另一个文件中,我想为该函数指定别名,这样我就不需要使用范围解析运算符来限定它。有人告诉我执行以下操作:

auto& RoundToNDecimalPlace = utilities::RoundToNthDecimalPlace;
// Or the following, const auto RoundToNDecimalPlace = utilities::RoundToNthDecimalPlace;

我注意到这仅适用于auto。为什么会这样呢?例如,为什么下面的代码不起作用?

double& RoundToNDecimalPlace = utilities::RoundToNthDecimalPlace;

最佳答案

由于 utilities::RoundToNthDecimalPlace 是一个函数,因此其类型为

double (double, int);

这是接受 double 并返回 int 的函数类型。请注意,这与 double 类型不同,因此您无法将 double& 类型的引用绑定(bind)到它。

当您使用auto&时,C++ 会正确推断变量的类型

double (&) (double, int)

它是一个函数的引用,该函数接受一个 double 和一个 int,然后返回一个 double。

话虽如此,这里不需要使用引用变量。如果您希望能够更简洁地访问该功能,只需说

using utilities::RoundToNthDecimalPlace;

希望这有帮助!

关于c++ - 为什么我只能使用 auto 类型创建函数别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59706224/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com