【发布时间】:2014-03-13 19:12:45
【问题描述】:
gcc (4.8.1) 和 clang (3.4) 编译我的 C++ 程序,它使用std::log2(x)。这个标准符合吗?
【问题讨论】:
-
为什么不应该呢?谷歌搜索此函数显示 it's part of the C++ standard library 自 C++11 以来。如果它不是标准库的一部分,则将其添加到
std命名空间将是未定义的行为。换句话说,标准库没有“扩展”之类的东西,谈到std命名空间。 -
@leemes 一个符合要求的实现不允许在任何标准头文件中添加名称到
std命名空间。一个简单的原因是,如果foo未定义为标准库的一部分,则允许用户在包含标准头文件之前将foo定义为宏。如果标头随后尝试将foo定义为(例如)函数,则宏将被展开,并且有效的程序将被拒绝。 -
@hvd 我知道...我不知道你为什么这么说。您是想将其添加到我的评论中,还是您误解了我想说的内容? ;) 我的观点是:因为不允许向
std添加东西,所以没有标准库的“扩展”之类的东西,例如在 C++11 之前添加的log2。跨度> -
@leemes 我想我误解了你的评论。 “将其添加到
std命名空间将是未定义的行为”,因为“程序不允许定义自己的std::log2,因此如果实现这样做,就不会有冲突”