gpt4 book ai didi

c++ - OS X 上的 std::locale 段错误,无法在任何其他平台上重现

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:22 25 4
gpt4 key购买 nike

我有以下代码建议用于我之前的问题 generate range for which std::isalpha evaluates to true .它显示当前区域设置中的所有 charisalpha 的计算结果为 true,因此对于英语区域设置,它显示 AB.. .Zab...z。但是,当我尝试访问 table。我在 OS X Mavericks 10.9.4 上用 g++4.9 和 clang++(Apple LLVM version 5.1 (clang-503.0.40) )编译了它。在所有其他平台(Linux/Solaris)上它都可以工作,没有段错误。

谁能指出 OS X 上 C++ 的 libc++/libstdc++ 是否存在问题,或者至少该问题是否可重现?

#include <iostream>
#include <locale>

int main() {
typedef std::ctype<char> ctype;
std::locale locale;
const ctype& facet = std::use_facet<ctype>(locale);
const ctype::mask* table = facet.table();

// You might skip this and work with the table, only.
std::string result;
for(unsigned i = 0; i < facet.table_size; ++i) {
if(table[i] & ctype::alpha)
result += char(i);
}
std::cout << result << '\n';
return 0;
}

PS:几个小时后,我发现(根据 Howard 的建议)clang++ 默认使用 libstdc++(为什么我还没有找到),这似乎在语言环境支持方面被打破了。当使用 libc++ 编译时,程序按预期工作。

最佳答案

不妨将我的评论变成答案:

由于 libstdc++ 除了 OSX 上的“通用”语言环境模型外不支持任何东西,因此几乎不支持 C++ 语言环境。您的段错误是由 facet.table(); 返回空指针引起的(标准实际上不允许这样做)。

遗憾的是,目前唯一的解决方案是完全远离 OSX 上的语言环境,或者改用 libc++,正如@HowardHinnant 指出的那样工作正常。

关于c++ - OS X 上的 std::locale 段错误,无法在任何其他平台上重现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25130927/

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