首页 > 后端开发 > C++ > 正文

为什么现在禁止 C 20 类模板构造函数中的冗余模板参数列表?

Barbara Streisand
发布: 2024-11-28 02:10:10
原创
304 人浏览过

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now Forbidden?

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

在 C 17 中,类模板构造函数可以具有冗余模板参数列表。例如:

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

但是,在 C 20 中,情况不再如此。最近的一项更改要求类模板的所有构造函数都必须使用注入的类名,这消除了声明符中的冗余。

此更改记录在 C 20 草案的兼容性部分中:

[diff.cpp17.class]
**Affected subclauses**: [class.ctor] and [class.dtor]
**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.
**Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
登录后复制

具体来说,构造函数声明符中的 id 表达式现在必须采用以下之一形式:

  • 在类的非友元成员规范中的成员声明中,封闭类的注入类名。
  • 在非友元成员规范中的成员声明中-friend 类模板的成员规范,命名封闭类模板的当前实例的类名。

因此,正确的构造函数声明C 20 简单来说就是:

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

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

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