gpt4 book ai didi

c++ - Visual C++ 和 gcc 之间从 std::isblank 返回的结果不一致。哪一个是错误的?

转载 作者:可可西里 更新时间:2023-11-01 17:55:33 24 4
gpt4 key购买 nike

在 Windows 上的 Visual C++ 和 Ubuntu 上的 gcc 之间调用 std::isblank 时,我看到了不一致的行为,我想知道哪个是正确的。

在两个编译器上——当默认语言环境是“C”语言环境时——以下调用返回 false

std::isblank('\n');  

这是我所期望的。它与我在 cppreference.com 上看到的一致

In the default C locale, only space (0x20) and horizontal tab (0x09) are classified as blank characters.

但是对于 C++,我们还有采用 std::locale 参数的版本

std::isblank('\n', std::locale::classic()); 

我在这里提供 std::locale::classic。那不应该等同于之前的调用吗?因为当我在 Windows 上调用第二个版本时,它返回 true。它将换行符视为空白字符。 Linux 仍然说 false。

我的理解(关于 std::locale::classic)是否正确?如果是这样,Visual C++ 版本是否错误?

最佳答案

是的,MSVS 是错误的。 [locale.statics] 指出:

static const locale& classic();
  1. The "C" locale.

  2. Returns: A locale that implements the classic "C" locale semantics, equivalent to the value locale("C").

  3. Remarks: This locale, its facets, and their member functions, do not change with time.

因此如下:

std::isblank('\n', std::locale::classic()); 

等同于:

std::isblank('\n');  

调用了 locale("C") 的地方。

关于c++ - Visual C++ 和 gcc 之间从 std::isblank 返回的结果不一致。哪一个是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com