本书示例在类声明中使用“显式”关键字。无效吗?
Posted
技术标签:
【中文标题】本书示例在类声明中使用“显式”关键字。无效吗?【英文标题】:Book example uses "explicit" keyword in class declaration. Is it invalid? 【发布时间】:2019-07-18 08:35:37 【问题描述】:我正在关注一本根据标准 C++11 教授 C++ 的书。本书展示了一个将子类标记为explicit
的示例。
根据我收集到的信息,这将使编译器检查与动态绑定有关的错误,并且您还必须在重写虚函数时显式使用 override
关键字,否则它将无法工作。我确实设置了一个小程序来测试它,但我得到了一个错误。而且我从来没有见过关键字explicit
在其他任何地方都被这样使用的例子。
这本书是否提供了不准确的信息,或者我错过了什么?我应该单独使用override
关键字吗?
class base
public:
virtual void f()
cout << "Called from base" << endl;
;
class derived explicit : public base
public:
void f() override
cout << "Called from derived" << endl;
;
在终端中写c++ -std=c++11 main.cpp -o main.exe
给了我以下错误:
error: expected unqualified-id
class derived explicit : public base
^
【问题讨论】:
【参考方案1】:以这种方式使用 explicit
在任何标准中都不是有效的 C++。来自explicit
上的cppreference:
1) 指定构造函数或转换函数(C++11 起)是显式的,即不能用于隐式转换和复制初始化。 2) [...] (C++20 特定...)
...最重要的是:
显式说明符只能出现在其类定义中的构造函数或转换函数(C++11 起)声明的 decl-specifier-seq 中。
这不包括你在书中展示的案例。查看curated list of books 并考虑切换到其中之一。
【讨论】:
以上是关于本书示例在类声明中使用“显式”关键字。无效吗?的主要内容,如果未能解决你的问题,请参考以下文章