【问题标题】:When is std::codecvt<char, char, std::mbstate_t>::always_noconv() required to return true?什么时候需要 std::codecvt<char, char, std::mbstate_t>::always_noconv() 才能返回 true?
【发布时间】:2021-02-09 03:33:25
【问题描述】:

标准 (C++17) 是否要求 std::codecvt&lt;char, char, std::mbstate_t&gt;::always_noconv() 返回 true

  • 适用于所有语言环境,或
  • 对于实现提供的语言环境,或
  • 仅适用于 C 语言环境,或
  • 还有别的吗?

C++ 标准确实有话要说。来自 C++17 的第 25.4.1.4 节:

codecvt&lt;char, char, mbstate_t&gt; 实现了退化转换;它根本不转换。

断章取义,这强烈表明它适用于所有语言环境。不过,如果有人能证实这一点,或者对为什么不应该这样,我会很感激。

【问题讨论】:

标签: c++ language-lawyer locale codecvt


【解决方案1】:

好的,正如cpplearner所指出的,标准(C++17)在第25.4.1.4.2节对do_always_noconv()的要求中也有以下文字:

codecvt&lt;char,char, mbstate_t&gt; 返回真。

如果文本改为:

特化 codecvt&lt;char,char, mbstate_t&gt; 返回 true。

我不会再有任何疑问了。

但是,由于这确实是第 25.4.1.4.2 节中其他函数下类似语句的表述方式,我认为其意图是要求在codecvt&lt;char,char, mbstate_t&gt; 专业化中,always_noconv() 返回 true。

因此,所有语言环境都是如此。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    相关资源
    最近更新 更多