C23 自动与 C++11 自动

问题描述 投票:0回答:2

C23 标准显然引入了使用“auto”关键字进行自动类型推导,见此处,就像在 C++11 中一样。但是,似乎有些不同。

根据此处,https://en.cppreference.com/w/cpp/keyword/auto,在 C++11 之后,

auto
不再 C++ 中的存储持续时间说明符。

但是,我无法轻易找到 C23 的等效语句。在 C23 中,

auto
still 是 C 中的存储类说明符吗?

我们还能用 C23 写

int auto x = 1;
吗?

编辑: 第一个问题的答案是肯定的。但正如 Andrew Henle 在下面的评论中指出的那样,第二个问题是不同的:

我们还能用 C23 写

float auto x = 1;
吗?

引用自 Andrew Henle,在standard document, 6.7.1 Storage-class specifiers, paragraph 4

auto 只能出现在具有文件范围的标识符的声明说明符中,或者如果要从初始化程序中推断出类型,则与其他存储类说明符一起出现。

好像这还不算case

float auto x = 1;
.

这个怎么解释?

c standards
2个回答
3
投票

是的,

auto
仍然是 C23 中的存储类说明符:

参见6.7.1 存储类说明符

  • auto
  • constexpr
  • extern
  • register
  • static
  • thread_local
  • typedef

1
投票

在 C23 中,auto 仍然是存储类说明符。

来自 C 23(6.7.1 存储类说明符)

语法

1 storage-class-specifier:
    auto
    constexpr
    extern
    register
    static
    thread_local
    typedef

语义学

6 存储类说明符指定标识符的各种属性 和声明的功能:

— 存储持续时间(块范围内的静态、thread_local、auto、 注册),

4 thread_local 不得出现在 a 的声明说明符中 函数声明。 auto 只能出现在声明中 具有文件范围或与其他标识符一起的标识符的说明符 存储类说明符,如果要从 初始化器

© www.soinside.com 2019 - 2024. All rights reserved.