首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查新建codecvt_byname是否成功

如何检查新建codecvt_byname是否成功
EN

Stack Overflow用户
提问于 2011-11-27 21:15:21
回答 1查看 515关注 0票数 0

有没有一个标准的方法来检查新的std::codecvt_byname构建是否成功?

我正在试验下面的程序:

代码语言:javascript
复制
// cl /nologo /Fetest_codecvt_byname.exe /EHsc test_codecvt_byname.cpp && test_codecvt_byname
// g++ -o test_codecvt_byname test_codecvt_byname.cpp && test_codecvt_byname

#include <cstdlib>
#include <iostream>
#include <locale>
#include <new>
#include <stdexcept>

int main()
{
    try {
        new std::codecvt_byname<wchar_t, char, mbstate_t>(".nonsense");
    } catch (const std::exception& ex) {
        std::cerr << "Error: " << ex.what() << std::endl;
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

显然,如果不支持指定的语言环境,libstdc++将抛出std::runtime_error对象。但是,Microsoft Visual C++的STL实现不会抛出异常。

不知道代码由哪个C++编译器编译,如何检查新std::codecvt_byname的构建是否成功?或者,有没有一种方法可以在没有内存不足的情况下检查构造是否成功?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-04 06:26:37

C++11 FDIS第22.3.1.1.2节,locale::facet类规定:

对于某些标准方面,

从它派生的标准"..._byname“类实现了与locale(const char*)使用相同名称构造的语言环境方面等效的虚拟函数语义。

遗憾的是,标准不要求在命名区域设置无效时由std::codecvt_byname构造函数抛出异常,显式std::locale构造函数locale(const char*)也是如此。但是,一种变通办法是尝试构造区域设置并对codecvt方面执行use_facet操作,而不是尝试使用std::codecvt_byname

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8285818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档