首页 > 后端开发 > C++ > C 20 类模板构造函数中是否允许冗余模板参数列表?

C 20 类模板构造函数中是否允许冗余模板参数列表?

DDD
发布: 2024-11-26 06:54:10
原创
874 人浏览过

Is Redundant Template Parameter Listing in C  20 Class Template Constructors Allowed?

C 20 中的类模板构造函数中的冗余模板参数列表

具有冗余模板参数列表的类模板构造函数的有效性一直存在争议C 20 的介绍。这是问题及其解决方案:

在 C 中17 中,下面的代码被认为是格式良好的:

template<typename T>
struct S {
    S<T>();
};
登录后复制

但是,在 C 20 中,相同的代码在 -std=c 20 下的某些编译器(例如 gcc trunk)中触发错误:

error: expected unqualified-id before ')' token
    3 |     S<T>();
                 ^
登录后复制

C 的变化20

C 20 标准要求更改类模板构造函数声明的语法。标准兼容性部分中的以下增量强调了这一点:

[diff.cpp17.class]

...

Change: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor.
Rationale: Remove potentially error-prone option for redundancy.
...
登录后复制

本质上,不再允许在以前的代码中使用“冗余”模板参数列表 S()。相反,必须使用注入的类名 S:

template<typename T>
struct S {
    S(); // CORRECT C++20 syntax
};
登录后复制

基本原理

此更改的基本原理是通过禁止使用简单的模板 ID。通过强制显式使用注入的类名,编译器可以更准确地解析预期的构造函数。

结论

C 20 中的此更改不构成错误,而是有意进行的重大更改,以增强类模板构造函数声明的清晰度和正确性。虽然这可能会导致依赖先前语法的现有代码出现兼容性问题,但它最终提高了 C 应用程序的整体安全性和可靠性。

以上是C 20 类模板构造函数中是否允许冗余模板参数列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板