【发布时间】:2016-04-07 23:44:07
【问题描述】:
我知道constexpr 将允许您在编译时将对象用作常量,但是什么时候这样做会有所帮助?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。
下面的两个例子都有效,那么为什么要把 constexpr 放在构造函数上呢?
在构造函数上使用 constexpr:
#include <iostream>
using namespace std;
class Rect
{
public:
constexpr Rect(int width, int height)
: mWidth(width), mHeight(height) {}
constexpr int getArea() const { return mWidth * mHeight; }
private:
int mWidth, mHeight;
};
int main(int argc, char* argv[])
{
constexpr Rect r(8, 2);
cout << r.getArea() << endl; //16
int myArray[r.getArea()]; // OK
return 0;
}
构造函数上没有 constexpr:
#include <iostream>
using namespace std;
class Rect
{
public:
Rect(int width, int height)
: mWidth(width), mHeight(height) {}
constexpr int getArea() const { return mWidth * mHeight; }
private:
int mWidth, mHeight;
};
int main(int argc, char* argv[])
{
Rect r(8, 2);
cout << r.getArea() << endl; //16
int myArray[r.getArea()]; // OK
return 0;
}
【问题讨论】:
-
但是 constexpr 被放置在
getArea()的两个示例中。 -
标记为
constexpr的函数仅在其参数(包括隐含的*this)也是常量表达式时才返回常量表达式 -
@Brian clang 接受代码。我发起了new question 寻求帮助