- 主题:这么操作不行么?
data member 是运行时的,你写成
class Test
{
static const int size = 5;
int arr[Test::size];
}
应该就可以了,因为static member在编译时编译器可以识别
【 在 grainbuds 的大作中提到: 】
: 那为啥在main里面这么写就行?
: :
--
FROM 122.224.174.*
或者说你的写法,在逻辑上是:
每个Test的object,都有一个size的member,如果没有特殊初始化,就初始化为5。换句话说,每个Test objet的size不一定是5,要object创建以后才知道,所以编译器就无法处理。
static member在逻辑上表示Test这个大类,有一个size的常量是5,不需要创建具体的object就能知道。
class层面的信息都是编译时,具体object层面的信息都是运行时。这么理解起来就容易了
【 在 grainbuds 的大作中提到: 】
: class Test
: {
: const int size = 5;
: ...................
--
FROM 122.224.174.*
他连这个都搞不懂,和他说constexpr,更加不能理解了
【 在 here080 的大作中提到: 】
: 我还是会建议所有要当成编译期常量的东西都用constexpr修饰。
: 加上static有另一层好处,相当手动优化了这个类的大小。
:
--
FROM 122.224.174.*
那他可能以后又会问,为什么static_assert(xxx)编译不过去,明明标记了constexpr
【 在 here080 的大作中提到: 】
: constexpr的好处是无脑啊。加上就是了。
:
--
FROM 122.224.174.*