gpt4 book ai didi

c++ - 强制编译器抛出错误的最简单方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 14:49:45 24 4
gpt4 key购买 nike

对于将其标记为重复的人:它不是;另一个问题涉及 enum,它们是编译时常量。这不是常量积分表达式,因此解决方案会非常不同。在暗示这已经在另一个问题中得到回答之前,请更仔细地查看下面的代码,因为它没有以任何方式回答。我正在检查一个对象的成员变量的值,在运行时创建的信息,我很好奇在这种情况下我能用它做什么。


如果我的 API 的用户做了她不应该做的事情,我现在需要使用东西来让编译器失败。

我不知道这是否可能,是吗?我上面提到的选项主要是运行时的,对吧?

例如,假设您有一个函数:

   void doSomethingIncredible(AwesomeClass amazingObject)
{
//perform life-changing work here except:
if (amazingObject.isntAmazing) //a bool property of object
//uh oh, life sucks, I refuse to compile this

现在调用这个函数将改变你生活的方方面面,除非 amazingObject 有一个特定的属性打开,例如,在这种情况下,我希望编译器甚至不允许它通过,即无法运行该程序。

函数体中的某处是一个强制编译失败的 C++ 机制,它提醒用户您不能将此函数用于这种低级的普通对象。

这可能吗?

澄清一下,这是我想根据变量内容在编译时执行的操作,如我上面的示例所示。使用 static_assert 的建议在这里不适用。

最佳答案

您可以选择 static_assert()编译时的条件 (C++11)

static_assert(false, "Hey user! You suck!");

或使用

#if (some_erroneous_condition_to_be_avoided)
#error "Hey user! You suck!"
#endif

如果你有兼容 GNU 的编译器(g++clang++ 等)

关于c++ - 强制编译器抛出错误的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16504482/

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