0

C++11 iso 標準は、そのような式について何と言っていますか?

class MyClass
{
    public:
        constexpr int test()
        {
            return _x;
        }

    protected:
        int _x;
};

_xで使用される非 const constexpr: エラーが発生しますか、それともconstexpr単純に無視されますか (非 const パラメーターを渡すときのように) ?

4

2 に答える 2

5

多少役に立たないが、それは完全に問題ない。

constexpr int n = MyClass().test();

は集合体であるためMyClass、そのように値を初期化すると、すべてのメンバーが値を初期化されるため、これはゼロになります。しかし、いくつかの磨きをかけることで、これを本当に便利にすることができます。

class MyClass
{
public:
    constexpr MyClass() : _x(5) { }
    constexpr int test() { return _x; }
// ...
};

constexpr int n = MyClass().test();  // 5
于 2012-09-26T15:53:37.110 に答える
1

式が定数式に解決されない場合、その式は使用できません。しかし、それはまだ使用できます:

#include <array>
constexpr int add(int a, int b)
{
  return a+b;
}
int main()
{
  std::array<int, add(5,6)> a1; // OK
  int i=1, 
  int j=10;
  int k = add(i,j); // OK
  std::array<int, add(i,j)> a2; // Error!
}
于 2012-09-26T15:56:01.680 に答える