声明的顺序可以改变程序吗?

问题描述 投票:0回答:1

也就是说,您可以通过改变声明的顺序仍然拥有有效的程序,但结果却不同。如果您可以将有效程序变成无效程序(显然您可以),那么这个问题就不是 我预计这可能会在不同程度的确定性上发生,从标准规定不同的行为到“仅仅”引入未定义的行为。

问题是在重新安排(整体)源布局时应该有多大的信心。如果仍然可以编译,我们是否可以合理地确定事情仍然可以正常工作?

我想这有点询问顺序将/可能重要的情况,因为现在很明显这种情况存在(以及是否有微不足道的对策)。

c++ language-lawyer refactoring
1个回答
0
投票

名称查找可能会产生不同的实体,具体取决于声明顺序。
  • 重载解析和部分专业化匹配仅考虑先前声明的实体,并且(通常)稍后声明更好的候选者是完全有效的。
  • 函数是否是预先定义的(而不仅仅是声明的)会影响表达式是否是常量表达式,这反过来又会影响其他事情,例如重载解析。
  • 静态存储持续时间对象的初始化顺序(有时)取决于它们的定义出现的顺序。如果初始化结果相互依赖,则更改顺序可能会更改初始化结果。
  • 甚至有一种臭名昭著的机制可以通过所谓的“友元注入”来引入实际的编译时状态。

© www.soinside.com 2019 - 2024. All rights reserved.