确定指向常量的指针是否指向常量对象?

无论如何确定一个指向常量的指针是否指向一个常量对象?

bool is_const_object(const int* p) {
    return ???;
}

int main() {
    int x = 42;
    const int y = 43;
    assert(!is_const_object(&x));
    assert(is_const_object(&y));
}

回答

不,没有办法。C++ 不存储有关常量的运行时动态信息。C++ 不知道函数内的数据是否真的是常量。

在少数情况下,它可以在有限制的情况下完成。

  1. 您可以将自己的动态运行时信息添加到每个 const 实例。

  2. 您可以破解可执行文件的加载并在内存中按段检测项目。

  3. 如果指针指向 constexpr 全局变量并检测到它,您可以小心地将代码编写为 constexpr。

  4. 您可以编写一个模板函数,它接受 aT*并检测它是否为 const 。

这些都没有做你要求做的事情,但他们做的事情与你要求做的事情相邻,这可能会解决你的真正问题。


以上是确定指向常量的指针是否指向常量对象?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>