gpt4 book ai didi

c++ - 在开关的默认标签中放置什么?

转载 作者:可可西里 更新时间:2023-11-01 15:53:51 24 4
gpt4 key购买 nike

假设我有一个枚举。

enum class ShapeName : char {TRIANGLE,CIRCLE,SQUARE};

后来我有这样的功能:

void Function (ShapeName const shape){

switch (shape){
case ShapeName::TRIANGLE:
DoSomething1();
break;

case ShapeName::CIRCLE:
DoSomething2();
break;

case ShapeName::SQUARE:
DoSomething3();
break;

default:
//THIS CODE BLOCK SHOULD NEVER BE EXECUTED!
}

return;
}

尽管永远不应该执行默认标签,但我想说明如果程序员向“ShapeName”添加另一个值并且在开关中没有考虑到它可能会出现的潜在错误。
你会建议我做什么?

<强>1。断言
我可以使用断言,但我在断言什么?

assert(false); //?

<强>2。异常(exception)情况
我可以抛出异常,但我认为这不是很好的做法。我的印象是异常是由于某些环境而无法预测的运行时事件。

<强>3。退出
我可以立即退出程序并出现错误。这感觉是最好的主意,但我不确定这是否是好的做法。我认为断言的优点是当您准备好发布程序时,您可以将它们全部关闭。然后,所有断言代码将不复存在。


也许还有另一种我不知道的方法。我确实使用了一个编译器标志来警告未解释的值,但我仍然想知道其他人推荐什么。

最佳答案

我喜欢使用信息性消息进行断言的想法。试试这个:

assert (!"The default case of so-so switch was reached.");

这总是返回 false,但会提供一条您可以使用的消息。

编辑:
我找到了我从内存中提取这个概念的来源;它在以下书中:
C++ 编码标准 - 101 条规则和指南

关于c++ - 在开关的默认标签中放置什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360050/

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