【问题标题】:How to create constexpr functions in c++如何在 C++ 中创建 constexpr 函数
【发布时间】:2017-04-01 02:51:03
【问题描述】:

我正在阅读 Bjarne Stroustrup 编写的Programming Principles and Practice Using C++,我被困在第 204 页,关于 constexpr,似乎我无法编译书中的代码示例: p>

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

【问题讨论】:

  • 在哪里你得到错误?您能否尝试创建一个Minimal, Complete, and Verifiable Example 并向我们展示,包括您如何调用该函数。
  • 如果您要返回 Point,您可能还需要将构造函数设为 constexpr
  • 这个错误听起来好像你在你发布的代码之外的某个地方有一个scalePoint 的原型,它声明时没有constexpr
  • 大多数编译器会告诉你之前的声明在哪里。继续阅读!

标签: c++


【解决方案1】:

正如评论者 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)
    {

    } 
};

这是为我编译的。

【讨论】:

    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 2011-01-03
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多