You need to enable JavaScript to run this app. C++20继承构造函数无需using声明?是标准特性还是VS2019独有?
优惠活动
大模型
产品
解决方案
定价
更多

C++20继承构造函数无需using声明?是标准特性还是VS2019独有?

问题解答

核心结论

你观察到的无需显式写using声明即可继承基类构造函数的行为,是微软MSVC编译器的独有非标准扩展,不属于C++20官方引入的标准特性。

C++标准规则说明

自C11正式引入继承构造函数特性以来,包括C20、C++23在内的所有后续标准,都始终遵循以下规则:

  • 派生类默认不会隐式继承基类的构造函数
  • 只有显式添加using 基类类名::基类类名;声明,才会将基类的构造函数引入派生类作用域,允许直接使用基类的构造函数签名初始化派生类对象

你给出的第二段带using Base::Base;的代码,是符合所有C++11及更高版本标准的正规实现方式。

MSVC行为说明

MSVC默认开启了大量用于兼容老版本代码的非标准扩展,即便你指定了/std:c++latest编译选项,这些扩展也不会默认关闭。如果你添加/permissive-编译选项强制MSVC严格遵循C++标准,你给出的第一段没有using声明的代码会直接编译报错,和GCC、Clang等其他标准兼容编译器的行为完全一致。

内容的提问来源于stack exchange,提问作者ewq468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 02:57:02