设置类属性的默认值

时间:2011-10-21 15:05:00

标签: c++

我有以下功能。我需要为详细级别设置一个通用值。 错误:Iso C ++禁止隔离。我是否需要通过构造函数来实现此目的?

是, 我试过了,它就像这样工作

  arche()
    {
    verbosity_ = 1;
    }

但我记得C ++有默认成员值的特殊语法。这可能是我应该使用的。它是什么?

  class test
    {
    protected:
      short verbosity_=1; // this does not work
    public:
      void setVerbosity(short v)
        {
        if((v==0 || v==1)) 
          {
          verbosity_ = v;
          }
        else 
          {
          cout << " Verbosity Level Invalid " << endl;
          }
        }
      virtual void runTest() = 0;
    };

4 个答案:

答案 0 :(得分:4)

你可以在构造函数中执行它,但是你不需要赋值,你可以使用这样的初始化语法:

test::test() : verbosity_(1)
{
}

答案 1 :(得分:3)

在C ++ 98和2003中你不能这样做;你必须通过构造函数来完成它。

在最新的标准C ++ 11中,您可以使用您正在尝试的语法。

答案 2 :(得分:2)

在C ++ 03中,您需要在构造函数中初始化short成员。

作为(有限的)解决方法,以下内容适用于整数类型:

template <class T, T value>
struct defaulted
{
    T val_;
    defaulted(): val_(value) {}  //by default initializes with the compile-time value
    defaulted(T val): val_(val) {}
    operator T() const { return val_; }
};

 class test
    {
    protected:
      defaulted<short, 1> verbosity_;
    public:
      void setVerbosity(short v)
        {
        if((v==0 || v==1))
          {
          verbosity_ = v;
          }
        else
          {
          cout << " Verbosity Level Invalid " << endl;
          }
        }
      virtual void runTest() = 0;
    };

答案 3 :(得分:1)

在C ++ 98和C ++ 03中,may only初始化static const个成员。

struct T {
   int x = 3;
};

int main() {
   T t;
   std::cout << t.x;
}

// prog.cpp:4: error: ISO C++ forbids initialization of member ‘x’
// prog.cpp:4: error: making ‘x’ static
// prog.cpp:4: error: ISO C++ forbids in-class initialization of non-const static member ‘x’


struct T {
   static const int x = 3;
};

int main() {
   T t;
   std::cout << t.x;
}

// Output: 3

否则您must使用ctor-initialiser:

struct T {
   int x;
   T() : x(3) {}
};

int main() {
   T t;
   std::cout << t.x;
}

// Output: 3

但是在C ++ 11中,可以为内置类型执行此操作: