如中所述命名空间.std#6:
让 F 表示标准库函数...除非 F 被指定为可寻址函数,否则如果 C++ 程序显式或隐式尝试形成指向 F 的指针,则其行为是未指定的(可能是格式错误的)...
这对于以下程序意味着:
#include <cctype>
auto f = &std::tolower; // bad
行为未指定,程序可能格式错误。 (std::tolower
不是可寻址函数)。
但是,以下程序的格式是否正确和/或行为是否已指定?
#include <cctype>
using u = decltype(&std::tolower); // good?
在这里,函数指针的形成是在未评估的上下文中完成的,因此我可以只获取函数指针的类型似乎是合理的。在这种情况下,我期望u
就只是int (*) (int) noexcept
。这是有效的吗?
其目的是,这是invalid。该规则的要点是允许实现执行诸如添加带有默认参数的参数或提供额外重载之类的操作。这些事情如果做得好,是看不见的calls的功能,但当功能行为不当itself被检查——特别是如果过载导致不存在单一的“自身”。这些都与求值无关:它发生在函数名称的重载决策期间。
也就是说,措辞可能更清晰:编译时和运行时行为的混合描述混淆了函数同一性的评估是否是有问题的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)