大佬教程收集整理的这篇文章主要介绍了c – 如何确保在运行时永远不会调用constexpr函数?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
现在让我们说你在C中有这个功能作为一个constexpr,并且你可以根据一些信息(比如编号,时间戳,别的东西)为你的build生成密钥.
你是一个勤奋的程序员,确保并以适当的方式调用它,以确保它只在编译时被调用,因此死机器从最终的可执行文件中删除代码.
但是,您无法确定别人不会以不安全的方式调用它,也可能编译器不会将功能删除,然后您的安全令牌算法将成为公共知识,使其成为更容易被攻击者猜测未来的令牌.
或者,除了安全性,假设该功能需要很长时间才能执行,并且您希望确保它在运行时不会发生,并为您的最终用户造成糟糕的用户体验.
有没有办法确保在运行时永远不能调用一个constexpr函数?或者,也可以在运行时抛出一个assert或者类似的代码,但是并不像编译错误那么明显.
我听说有一些方法涉及抛出一个不存在的异常类型,所以如果constexpr函数没有被破坏,你会得到一个链接器错误,但是听说这只适用于一些编译器.
#include<utility> template<typename T,T V> constexpr auto ct() { return V; } template<typename T> constexpr auto func() { return ct<decltype(std::declval<T>().value()),T{}.value()>(); } template<typename T> struct S { constexpr S() {} constexpr T value() { return T{}; } }; template<typename T> struct U { U() {} T value() { return T{}; } }; int main() { func<S<int>>(); // won't work //func<U<int>>(); }
以上是大佬教程为你收集整理的c – 如何确保在运行时永远不会调用constexpr函数?全部内容,希望文章能够帮你解决c – 如何确保在运行时永远不会调用constexpr函数?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。