Joe*_*Joe 8 c++ gcc locale visual-studio
我std::isblank在Windows上的Visual C++和Ubuntu上的gcc之间的调用中看到不一致的行为,我想知道哪一个是正确的.
在两个编译器上 - 当默认语言环境是"C"语言环境时 - 以下调用返回false
std::isblank('\n');
Run Code Online (Sandbox Code Playgroud)
这就是我的期望.它与我在cppreference.com上看到的相符
在默认的C语言环境中,只有空格(0x20)和水平制表符(0x09)被归类为空白字符.
但是对于C++,我们还有一个带std::locale参数的版本
std::isblank('\n', std::locale::classic());
Run Code Online (Sandbox Code Playgroud)
在这里,我供应std::locale::classic.这不应该等同于之前的电话吗?因为当我在Windows上调用第二个版本时,它返回true.它认为换行符是空白字符.Linux仍然说错误.
我的理解(约std::locale::classic)是否正确?如果是这样,Visual C++版本是错误的吗?
是的,MSVS错了. [locale.statics]声明:
Run Code Online (Sandbox Code Playgroud)static const locale& classic();
"C"语言环境.
返回:实现经典"C"语言环境语义的语言环境,相当于值locale("C").
备注:此区域设置,其构面及其成员函数不随时间变化.
因此如下:
std::isblank('\n', std::locale::classic());
Run Code Online (Sandbox Code Playgroud)
是相同的:
std::isblank('\n');
Run Code Online (Sandbox Code Playgroud)
在哪里locale("C")被称为.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |