C和C ++标准之间有什么关系?[英] What is the Relationship Between the C and C++ Standards?

本文是小编为大家收集整理的关于C和C ++标准之间有什么关系?的处理方法,想解了C和C ++标准之间有什么关系?的问题怎么解决?C和C ++标准之间有什么关系?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我在写这个答案我是从 http:///en.cppreference.com/w/cpp/string/byte/tolower#parameters

不能表示为无符号字符,并且不等于EOF,该行为是不确定的

我去检查添加了此短语的编辑我发现作者的评论:

不能使用CTYPE的否定签名字符.每C99 7.4/1

作者从C ++文档中的C99标准引用.那有效吗?我在C ++标准中找不到有关此功能的定义的任何内容,因此我必须假设它是有效的.

,但这与我有关2个原因:

  1. 我怎么知道C ++标准的哪个版本取决于?
  2. 推荐答案

    第一个问题:

    C ++标准明确列出了其依赖其规范性参考部分的C标准.对于C ++ 14,[Intro.refs] 1.2/1碰巧列表C 99:

    • ISO/IEC 9899:1999,编程语言 - c
    • ISO/IEC 9899:1999/COR.1:2001(e),编程语言 - C,技术矫正1
    • ISO/IEC 9899:1999/COR.2:2004(e),编程语言 - C,技术矫正2
    • ISO/IEC 9899:1999/COR.3:2007(e),编程语言 - C,技术误导3

    第二个问题:

    C ++标准不会隐式合并C标准的任何部分;所有对C标准的参考都是明确的. C ++与C偏离C的良好信息来源是附件C,C ++标准的"兼容性",尤其是C.1 [diff.iso].

    此外,对C标准库的引用分散在整个C ++标准库的描述中(C ++ 14中的第17-30章).特别有趣的是:

    • 17.2 [library.c],描述了C标准库的基本包含
    • 第18章[language.support],描述了C ++标准库的许多<c:::>标题(提供C标准库功能的标准库).

    其他推荐答案

    我如何知道C ++标准的哪个版本取决于?

    在C ++ 14中,它是ISO/IEC 9899:1999(加上三个折叠术,本质上是C99),如N4140中的1.2 [Intro.refs]中所述.在C ++ 98中,它是C90,在C ++ 17中,可能是C11,但是C ++标准始终会明确.

    如果我参考C ++查看C标准,我怎么可能知道我正在寻找的区域是否已被覆盖?

    您在C ++标准中查看,它要么明确导入C定义减去restrict或任何它想要或进行明确修改的C行为.

    通常,阅读良好的文档而不是标准本身会很好地为您服务.


    解决您的最初问题:

    作者从C ++文档中的C99标准引用.这是有效的吗?

    是,因为

    1 表74 [包含std::tolower,我],75、76、77、78和79描述标题<cctype>,<cwctype>,<cstring>,<cstring>,<cwchar>,<cstdlib> (角色转换)和<cuchar>.
    2 这些标头的内容应与标准C库标题<ctype.h>,<wctype.h>, <string.h>,<wchar.h>和<stdlib.h>和c Unicode TR header <uchar.h>与 按照修改[不适用于std::tolower,我]:

    21.8 [C.Strings] N4140

    其他推荐答案

    编辑是正确的,此特定文本已在C90以来已在标准中.

    来自C90 4.3

    标题声明了几个可用于测试的功能 和映射字符.在所有情况下,论点都是INT, 其价值应表示为未签名的字符或应 等于宏EOF的值.如果该论点还有其他 价值,行为不确定.

    来自C11 7.4/1

    标题声明了几个可用于分类的功能 和映射字符.在所有情况下,论点都是INT, 其价值应表示为未签名的字符或应 等于宏EOF的值.如果该论点有其他价值, 行为不确定.

    相同的文本; C一直这样.因此,您的特定C ++版本使用哪个C版本,因为所有C版本都是等效的.

    本文地址:https://www.itbaoku.cn/post/359139.html