相关疑难解决方法(0)

constexpr在非const成员函数上的用途是什么?

使用constexpr构造函数和函数(不同的vc,g ++)文字类编译错误中接受的答案表明,在C++ 14中存在差异constexpr int A::a()并且constexpr A::a() const可以使用.即constexpr在成员函数上并不意味着函数不会更改它所作用的对象.

给出的例子是:

struct A {
    constexpr A() {}
    constexpr int a() {return 12; }
    constexpr int b() const {return 12; }
};

int main()
{
    constexpr A a;
    // DOES NOT COMPILE as a() is not const
    // constexpr int j = a.a();
    const int k = a.b(); // Fine since b() is const
}
Run Code Online (Sandbox Code Playgroud)

对我来说,constexpra()好像没用.constexprconst成员函数是否有具体用途?

c++ constexpr c++14

17
推荐指数
2
解决办法
847
查看次数

将set函数(setter)标记为constexpr的目的是什么?

我无法理解将setter函数标记为的目的constexpr,这是自C++ 14以来允许的.我的误解来自下一个情况:我声明了一个带有constexpr c-tor的类,我将在constexpr上下文中使用它,通过创建该类的constexpr实例constexpr Point p1.对象p1现在是常量,其值无法更改,因此constexpr无法调用setter.另一方面,当我class Point在非constexpr上下文中创建my的实例时Point p,我可以为该对象调用setter,但是现在setter不会在编译时执行,因为该对象不是constexpr!

因此,我不明白如何使用constexprsetter 增强代码的性能.

这是演示在非constexpr对象上调用constexpr setter的代码,这意味着运行时计算,而不是编译时:

class Point {
public:
    constexpr Point(int a, int b)
    : x(a), y(b) {}

    constexpr int getX() const noexcept { return x; }
    constexpr int getY() const noexcept { return y; }

    constexpr void setX(int newX) noexcept { x = newX; }
    constexpr void setY(int newY) noexcept { y = newY; }
private:
    int x;
    int …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++14

11
推荐指数
2
解决办法
385
查看次数

标签 统计

c++ ×2

c++14 ×2

constexpr ×2