gpt4 book ai didi

c++ - 在编译时比较静态字段指针

转载 作者:太空狗 更新时间:2023-10-29 20:43:22 25 4
gpt4 key购买 nike

我有一个派生自类 A 的类 B。A 声明了一个静态字段 f,而 B 可能声明了一个同名的类似字段。以下不起作用:

struct A { static int f; };
struct B : A { static int f; }; // A::f is different from B::f
struct C : A {}; // A::f is the same as C::f
BOOST_STATIC_ASSERT((&A::f != &B::f));
BOOST_STATIC_ASSERT((&A::f == &C::f));

尽管理论上可以在编译时检查这些断言,但由于常量表达式不能获取地址,因此不允许使用它们。

有没有办法在编译时进行这种检查?

最佳答案

尝试将静态变量的定义放在静态断言的范围内。

这适用于 gcc 4.7.2:

struct A { static int f; };
struct B : A { static int f; };
struct C : A {};

int A::f;
int B::f;

static_assert(&A::f != &B::f, "B");
static_assert(&A::f == &C::f, "C");

int main()
{
}

编译:

$ g++ -std=gnu++11 test.cpp
$ ./a.out

关于c++ - 在编译时比较静态字段指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15535545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com