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;
.
这个怎么解释?
是的,
auto
仍然是 C23 中的存储类说明符:
参见6.7.1 存储类说明符:
auto
constexpr
extern
register
static
thread_local
typedef
在 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 只能出现在声明中 具有文件范围或与其他标识符一起的标识符的说明符 存储类说明符,如果要从 初始化器