std::log2()是扩展还是C++;标准 GCC(4.8-1)和CLAN(3.4)编译了我的C++程序,使用了 STD::Log2(x)< /C>。此标准符合吗?

std::log2()是扩展还是C++;标准 GCC(4.8-1)和CLAN(3.4)编译了我的C++程序,使用了 STD::Log2(x)< /C>。此标准符合吗?,c++,math,c++11,C++,Math,C++11,自C++11以来,它现在包含在标题中 您可以在这里找到更多信息:自C++11以来,它现在包含在标题中 这里可以找到更多信息:< P>如果你使用的是一个早期的C++编译器,没有这个函数,你可以使用日志(x)/log(2)< /C> > < /P> < P>如果你使用的是一个早期的C++编译器,没有这个函数,你可以使用日志(X)/log(2)< /> >。通过谷歌搜索这个函数可以发现,自从C++11。如果它不是标准库的一部分,那么将其添加到std命名空间将是未定义的行为。换句话说,标准库没有“扩展”

自C++11以来,它现在包含在
标题中


您可以在这里找到更多信息:

自C++11以来,它现在包含在
标题中



这里可以找到更多信息:

< P>如果你使用的是一个早期的C++编译器,没有这个函数,你可以使用<代码>日志(x)/log(2)< /C> > < /P> < P>如果你使用的是一个早期的C++编译器,没有这个函数,你可以使用<代码>日志(X)/log(2)< /> >。通过谷歌搜索这个函数可以发现,自从C++11。如果它不是标准库的一部分,那么将其添加到
std
命名空间将是未定义的行为。换句话说,标准库没有“扩展”这类东西,就
std
名称空间而言。@leemes一致性实现不允许在任何标准头中向
std
名称空间添加名称。原因很简单,如果
foo
未定义为标准库的一部分,则允许用户在包含标准头之前将
foo
定义为宏。如果标题试图将
foo
定义为(例如)函数,宏将被展开,有效程序将被拒绝。@hvd我知道。。。我不知道你为什么这么说。你是想在我的评论中加上这句话,还是误解了我想说的话我的观点是:由于不允许向
std
添加内容,因此标准库中没有“扩展”这样的内容,例如添加时C++11之前的
log2
。@leemes我想我误解了你的评论。“将其添加到
std
名称空间将是未定义的行为”被理解为“不允许程序定义自己的
std::log2
,因此如果实现这样做,就没有冲突”为什么不应该?通过谷歌搜索这个函数可以发现,自从C++11。如果它不是标准库的一部分,那么将其添加到
std
命名空间将是未定义的行为。换句话说,标准库没有“扩展”这类东西,就
std
名称空间而言。@leemes一致性实现不允许在任何标准头中向
std
名称空间添加名称。原因很简单,如果
foo
未定义为标准库的一部分,则允许用户在包含标准头之前将
foo
定义为宏。如果标题试图将
foo
定义为(例如)函数,宏将被展开,有效程序将被拒绝。@hvd我知道。。。我不知道你为什么这么说。你是想在我的评论中加上这句话,还是误解了我想说的话我的观点是:由于不允许向
std
添加内容,因此标准库中没有“扩展”这样的内容,例如添加时C++11之前的
log2
。@leemes我想我误解了你的评论。“将其添加到
std
名称空间将是未定义的行为”被理解为“程序不允许定义自己的
std::log2
,因此,如果一个实现这样做,就没有冲突”我在这个网站上看到过,its搜索功能没有(for仍然没有)当搜索
std::log2
log2
时出现此页面:-(@Walter>log2非常奇怪。感谢您接受答案。我正在查看此网站,当搜索
std::log2
log2
时,its搜索功能没有(并且仍然没有)出现此页面:-(@Walter很奇怪。谢谢你接受了答案。是的,我知道,这通常会调用
std::log()
两次。@Walter你总是可以为
log(2.0)使用硬编码常量
因为它永远不会改变。
0.693147180559945309
应该可以工作。log2对二次幂有特殊处理吗?我在log(x)/log(2.0)中遇到浮点错误但当我使用log2时,它们就解决了。@SapphireSun我怀疑它对待2的幂与任何其他输入不同,但它可能有一个不同的算法。不看库的实现是不可能知道的。是的,我知道,这通常会调用
std::log()
两次。@Walter您可以始终为
log(2.0)
使用硬编码常量,因为它永远不会更改。
0.693147180559945309
应该可以工作。log2对二次幂有特殊处理吗?我在使用log(x)/log(2.0)时遇到浮点错误但当我使用log2时,它们就解决了。@SapphireSun我怀疑它对待2的幂与其他输入的方式不同,但它可能有一个不同的算法。不看库的实现是不可能知道的。