如何在C 中创建ConstexPR函数

How to create constexpr functions in c++

本文关键字:创建 ConstexPR 函数      更新时间:2023-10-16

我正在阅读使用Bjarne Stroustrup撰写的C 练习的编程原理和练习,并且我被困在第204页,关于Constexpr,我似乎无法制作代码书中的示例:

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

Point是一个具有两个成员的类,X Y和一个构造函数:

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

我遇到的错误是:

Error (active)      
function "scalePoint" (declared at line 13) was previously not declared constexpr

正如评论者bo正确指出的那样,您也必须使Point Constexpr的构造函数。constexpr函数只能调用其他constexpr函数!

此外,您只有班级的私人成员。因此,函数scalePoint()无法访问p.x,p.y,并且由于构造函数是私有的。

使点成为结构或添加"公共:"语句:

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

为我编译。