如何在c ++中创建constexpr函数

时间:2017-02-18 21:08:37

标签: c++

我正在阅读由Bjarne Stroustrup编写的编程原理和实践使用C ++ ,我在第204页,关于constexpr,似乎我无法在书中编写代码示例:

test <- subset(test, select = -c(i) )

Point是一个有两个成员的类,x y和一个构造函数:

constexpr double xscale = 10;
constexpr double yscale = 0.8;
constexpr Point scalePoint(Point p)
{
    return{ xscale * p.x, yscale * p.y };
}

我得到的错误是:

class Point
{
    double x;
    double y;
    Point(double inX, double inY)
        : x(inX),y(inY)
    {

    } 
};

1 个答案:

答案 0 :(得分:2)

正如评论员Bo指出的那样,你必须制作Point constexpr的构造函数。 Constexpr函数只能调用其他constexpr函数!

此外,您在Point类中只有私人会员。因此,函数scalePoint()无法访问p.x,p.y并且无法创建Point的实例作为返回值,因为构造函数是私有的。

Make Point是一个结构或添加“public:”语句:

struct Point
{
    double x;
    double y;
    constexpr Point(double inX, double inY)
        : x(inX),y(inY)
    {

    } 
};

那为我编译。