c++ - C++中接口(interface)文件和实现文件之间的显式函数区别

标签 c++

我对实现中的显式函数有疑问,接口(interface)文件是 C++。让我用一个例子来解释它。

接口(interface)文件:

#ifndef IntCell_H
#define IntCell_H
class IntCell{
    public:
        explicit IntCell(int initialValue =0);
        int read() const;
        void write( int x );
    private:
        int storedValue;
};
#endif

实现文件:

#include "IntCell3.h"

IntCell::IntCell(int initialValue)
:storedValue(initialValue) {}

int IntCell::read() const
{ return storedValue; }

void IntCell::write( int x )
{ storedValue = x ;}

在编写这些代码时,签名必须与我们在读取函数中看到的完全匹配(两者都是访问器)。我同意,但问题是为什么我不能写

IntCell::explicit IntCell(int initialValue) 

在实现文件中?我不能在这一行中添加“显式”一词的原因是什么? 提前致谢。

最佳答案

因为这是规则。您只将 explicit 放在声明(标题)中。原因是因为实现仅通过声明在其他翻译单元中可见。所以如果声明在头部没有被标记为explicit,那么其他翻译单元就不能“知道”该函数被标记为explicit。并且因为将 explicit 放在实现文件中没有意义,语言的设计者决定它应该只在声明中使用。另一个原因是清晰度:为什么要在允许已经足够复杂的声明的语言中添加另一种无用的符号语法,例如:

void (*signal(int, void (*fp)(int)))(int);

关于c++ - C++中接口(interface)文件和实现文件之间的显式函数区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311138/

相关文章:

c++ - 如何停止 std::set 排序?

c++ - 默认定义声明的不完整冗长

c++ - 在 C++ 中读取多行输入

C++在循环中逐行写入文件或添加到数组并在循环后写入文件?

c++ - 执行 int 3 中断会停止 Linux 上的整个进程还是仅停止当前线程?

c++ - 启用 istream operator>> 接受两个或三个值

c++ - 当我 "re-initialize"指针时会发生什么

c++ - 如何制作从 C++ 到 Swift 的回调函数指针?

c++ - 将多个字符串传递给 string::find 函数

c++ - 生成类唯一标识的有效方法?