是否缺少必需的包含未定义行为?

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

[我写了对How is it possible to use pow without including cmath library的答复时,我担心已经证明缺少所需标头的包含实际上是未定义的行为,但是由于我没有发现对此事实的任何同意,因此我想提出一个正式问题:

缺少必需的标题,即

#include <iostream>

int main()
{
    std::cout << std::pow(10, 2);
}
  1. 格式错误([defns.ill.formed])代码?
  2. 调用未定义的行为([defns.undefined] ??
  3. 如果不是1和2,是未指定的行为[defns.unspecified]还是实现定义的行为[defns.impl.defined]?
  4. 如果不是1,即该代码格式正确,那不会与[using.headers]和[intro.compliance]“接受并正确执行格式正确的程序”矛盾吗?

[和我的answer一样,我倾向于肯定两个问题,但是由于Difference between Undefined Behavior and Ill-formed, no diagnostic message required,[using.headers]非常令人困惑。正如[defns.well.formed]表示构造到ODR的程序格式正确,并且有规范说明每当例如iostream不能定义pow时,有人可能会说这仍然是未指定的行为([defns .unspecified])。对于这样一个重要的问题,我不想仅仅依靠我的标准口译技能来给出明确的答案。请注意,如果代码是UB,也不会问问题,那么被接受的(即唯一的)其他答案不会回答。

当我写了一个关于如何在不包含cmath库的情况下如何使用pow的答案时,我担心已经证明缺少所需头文件的包含实际上是未定义的行为,但是由于我有...

c++ include language-lawyer undefined-behavior
1个回答
0
投票

这是未指定

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