Инициализация частных статических составных значений constexpr - PullRequest
0 голосов
/ 09 октября 2018

Я знаю, рекомендовано , чтобы объявления классов были в заголовочном файле, а инициализация членов класса - в исходном файле.Однако, поскольку мой объект структуры (compound) объявлен как static constexpr, я считаю, что могу определить его в файле заголовка (показан ниже).

header1.h:

namespace common
{
   namespace abc
   {
      struct compound
      {
         unsigned int intgr1;
         unsigned int intgr2;
         unsigned int intgr3;
      };
   }
}

test.h:

#include "header1.h"

namespace common
{
   namespace def
   {
      class xyz
      {
         // public: ...

         private:
            static constexpr abc::compound foo = 
               {0, 1, 2}; // <--- C4268 warning here
      };
   }
}

test.cpp:

#include "test.h"

namespace common
{
   namespace def
   {
      constexpr abc::compound xyz::foo;
   }
}

Однако, это дает мне предупреждение компилятора уровня 4 (MSVS 2015) (C4268 - показанное выше в тесте.h) с указанием:

'private: static common::abc compound common::def::xyz::foo':'const' 
static/global data initialized with compiler generated constructor fills the   
object with zeros

Что означает это предупреждение?Есть ли лучший способ инициализации этой структуры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...