静态函数返回常量浮点数

时间:2014-02-05 16:56:36

标签: c++

我有一个类,称之为myClass,其中pi存储为const float,如下所示:

const float pi = 3.1415;

和一个返回其值的公共函数:

static float _pi() { return pi; };

当我想在我的其他代码中使用这个pi号时,通过这样调用它:

myClass::_pi

我得到了这个我不太懂的错误,为什么我不能返回这样的值?以及如何使其按预期工作?

expression must have arithmetic or unscoped enum type

2 个答案:

答案 0 :(得分:1)

首先,如果没有类的实例,静态成员函数将无法访问非静态成员变量。

const float pi = 3.1415;           // Non-static. Created upon instantiation
static float _pi() { return pi; }; // Error. No access to instance.

如果您想静态调用函数_pi,那么您还应该使常量pi静态。

其次,在调用函数pi时,您必须使用()调用它,例如

float x = myClass::_pi();

最后,您可以使用C ++ 11 constexpr来生成pi并返回值_pi编译时常量。这将导致编译器在每个调用站点的编译时插入常量。您也可以在静态断言等中使用表达式_pi()

static constexpr float pi = 3.1415f;       // Use 'f' postfix for float literals.
static constexpr float _pi() { return pi; }

使用:

static_assert(myClass::_pi() == 3.1415f, "Uh-oh, wrong value.");

答案 1 :(得分:0)

只是spitballing但人们倾向于在一个基本的数学标题而不是这个中浮动pi或kPI或任何你喜欢的符号。 pi会在其他地方变得不同吗?