C++ 在typedef中使用const int类成员?
我在使用C++11编译时遇到了以下问题:C++ 在typedef中使用const int类成员?,c++,c++11,C++,C++11,我在使用C++11编译时遇到了以下问题: class A{ const uint32_t X = 5; typedef std::array<B, X> ARRAY; }; A类{ 常数32_t X=5; typedef std::数组; }; 我得到了错误信息 非静态数据成员的使用无效 我不想让它成为静态的,因为我有一些动态链接问题,我不想使用初始化列表,因为我希望这些“神奇的数字”在标题的顶部非常清晰。非常老式的方法是定义x5没有人再使用此功能了,除非他们想
class A{
const uint32_t X = 5;
typedef std::array<B, X> ARRAY;
};
A类{
常数32_t X=5;
typedef std::数组;
};
我得到了错误信息
非静态数据成员的使用无效
我不想让它成为静态的,因为我有一些动态链接问题,我不想使用初始化列表,因为我希望这些“神奇的数字”在标题的顶部非常清晰。非常老式的方法是定义x5代码>没有人再使用此功能了,除非他们想在代码审阅会话中受到批评。
非常老式的方法是使用enum{X=5}在我看来,这是C++11之前最好的方法
实现这一点的现代方法是使用静态constexpr uint32\u t X=5代码>
所有这些方法都确保了X
是编译时可计算的。非常老式的方法是定义x5代码>没有人再使用此功能了,除非他们想在代码审阅会话中受到批评。
非常老式的方法是使用enum{X=5}在我看来,这是C++11之前最好的方法
实现这一点的现代方法是使用静态constexpr uint32\u t X=5代码>
所有这些方法都确保X
在编译时是可计算的。另一种方法是
class A{
enum Array_Size : uint32_t { X = 5 };
typedef std::array<B, X> ARRAY;
};
A类{
枚举数组_大小:uint32_t{X=5};
typedef std::数组;
};
另一种方法是
class A{
enum Array_Size : uint32_t { X = 5 };
typedef std::array<B, X> ARRAY;
};
A类{
枚举数组_大小:uint32_t{X=5};
typedef std::数组;
};
static constexpr
我不想使用static,因为这是由使用静态和动态链接时出现的错误造成的……即使你让它工作,如果它是const,它对每个实例都是一样的。只是浪费了包含值5的空间。它应该是静态的。也许你应该问一下链接问题,而不是问你认为它的解决方案是什么,这不是一个很好的解决方案。@PiotrSkotnicki,只需解决一些问题:Pstatic constexpr
我不希望使用static,因为这是由于使用静态和动态链接导致的错误造成的……即使你让它工作起来,如果它是const,它对每个实例都是一样的。只是浪费了包含值5的空间。它应该是静态的。也许你应该问一下链接问题,而不是问你认为它的解决方案是什么,这不是一个很好的解决方案。@PiotrSkotnicki,只要解决一件事:Paconstexpr
成员应该是静态的
,否?一些不太旧的MS Visual Studio版本不支持constexpr
;如果需要与这些版本兼容,可以使用const
。constepr
成员应该是static
,不是吗?一些不太旧的MS Visual Studio版本不支持constepr
;如果需要与这些版本兼容,可以使用const
。您不需要为enum
编任何名称。简单的语法enum:uint32{…}
就足够了。您不需要为enum
编任何名称。简单的语法enum:uint32{…}
就足够了。