所以,我一直在读C++标准,找到了[defns.Undefined](3.27,在我正在读的C++17草案中,请注意,当我在这里引用C++17时,我在其他标准中发现了类似的措辞)--这是未定义行为的定义。我注意到这样的措辞(强调我的):
注意:当本国际标准省略任何行为的明确定义时,或者当程序使用错误的构造或错误的数据时,可能会出现未定义的行为
现在,想想看,这有点道理。这有点像是说,如果标准没有给它一个行为,它就有一个未定义的行为。它似乎是在说,如果你做了一些超出标准范围的事情,标准对此无话可说。这说得通。
然而,这也有点奇怪,因为我一直认为未定义的行为必须由标准显式声明。然而,这似乎暗示我们应该假设未定义的行为,除非我们被告知不是这样。
如果是这种情况,那么就不能有未定义行为的实例是未定义行为,因为标准没有显式地给出某个构造的行为吗?如果这样的事情是可能的,有没有可能生成一个未定义行为的例子(仍然可以编译),因为这个措词是未定义的行为,或者任何属于这个范围的东西由于某种原因几乎不可能构造?
如果是这种情况,那么就不能有未定义行为的实例是未定义行为,因为标准没有显式地给出某个构造的行为吗?
我认为这才是正确的观点。如果标准“意外地”忽略了特定构造行为的规范,但我们都知道它“应该”被很好地定义,那么这就是标准中的缺陷,需要修正。另一方面,如果它是一个“应该”为UB的构造,那么标准就已经是“正确的”了(尽管显式化也有好处)。
例如,如果对象的构造函数尚未开始执行或析构函数已经完成,标准没有提到如果typeid
应用于多态类类型的lvalue会发生什么。因此,该行为不属于不作为。它也是“明显”UB的东西。所以没有问题。
问题内容: 我在Google上搜索并不断提出“不,这是不可能的”,但是这些帖子的发布日期为2005-2007,所以我想知道是否已更改。一个代码示例: 解决方案之一是传递null,然后检查null并设置变量。我不想这样做,也不必这样做。如果这是真的,那么MySql开发人员需要唤醒,因为我可以用MSSQL做更多的事情。 问题答案: 仍然不可能。
问题内容: 为什么我不能使用默认方法实现创建一个? 问题答案: 您可以在功能接口中使用默认方法,但是其约定要求您提供一个单一的抽象方法(或SAM)。由于默认方法具有实现,因此它不是抽象的。 从概念上讲,功能接口仅具有一种抽象方法。由于默认方法具有实现,因此它们不是抽象的。 和 如果使用此注释类型对类型进行注释,则编译器需要生成错误消息,除非: 该类型是接口类型,而不是注释类型,枚举或类。 带注释的
为什么我不能用默认的方法实现创建一个?
问题内容: 是否可以在String方法中使用默认参数。代码如下所示: 上面的代码生成错误。有可能纠正吗? 问题答案: 不,您通常这样做的方法是重载这样的方法:
问题内容: 可以说我希望每个组件都具有默认的道具吗? 问题答案: 此处的文档位于: https //material-ui.com/customization/globals/#default-props 这是如何执行此操作的示例:
我正在尝试在我的Android项目上启用proguard代码混淆。这些年来,我看到了很多问题,但很多线索都是相当古老的,很难说出它们对我有多大的相关性。 2编辑项目。属性,取消注释 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 3由于pro Guard-Project.txt不