确定指向常量的指针是否指向常量对象?
无论如何确定一个指向常量的指针是否指向一个常量对象?
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++ 不知道函数内的数据是否真的是常量。
在少数情况下,它可以在有限制的情况下完成。
-
您可以将自己的动态运行时信息添加到每个 const 实例。
-
您可以破解可执行文件的加载并在内存中按段检测项目。
-
如果指针指向 constexpr 全局变量并检测到它,您可以小心地将代码编写为 constexpr。
-
您可以编写一个模板函数,它接受 a
T*并检测它是否为 const 。
这些都没有做你要求做的事情,但他们做的事情与你要求做的事情相邻,这可能会解决你的真正问题。