C++概念与接口有什么区别?

4

我的理解是,C++库概念对于C++来说类似于Java中的Closeable这样的接口(根据链接的来源,概念是指命名的要求集合)。

  1. 这个比喻正确吗?
  2. C++接口(即具有纯虚方法的类)和C++库概念之间有什么区别?
  3. 一般来说,通过多重继承实现C++库概念是否相当于在Java中实现多个接口(Java没有多重继承)?

“库概念”是指在C++标准的规范文本中用于定义标准库期望的“命名要求”; 也就是说,它们在C++中并不存在,只是用于定义它。 - molbdnilo
是的,我的意思是 C++ 库的概念,而不是 C++ 的概念。 - syntagma
2个回答

2
  1. 这并不是一个完全相似的比喻,但概念类似于接口。只有纯虚成员函数的类更接近于Java接口。Java泛型可能更接近于C++的概念,但它们的限制要多得多。你只能使用它们来要求类型继承特定的基类或接口(我可能有些错误)。Haskell类型类与C++的概念相当相似。

  2. C++接口是一个类。实现接口意味着继承接口并实现纯虚成员函数。概念是一组要求。符合概念意味着符合所有要求。可以要求特定表达式的有效性(必须具有名为iterator的成员类型别名)或行为(i++必须等同于It ip=i; ++i; return ip;)。

    接口的继承可以且必须在语言中定义,但目前没有语言支持正式指定概念。已经提出了语言支持,但尚未包含在当前的(C++14)标准中。

    继承是动态(运行时)多态,而概念是与模板结合使用的静态(编译时)多态。

  3. 不等同。动态和静态多态性是非常不同的事情。


0
  1. 不,这是错误的。Java中的接口与C++中的接口相同(一个类中的每个方法都是虚拟纯函数)。

  2. C++概念推断类功能,而不是C++接口定义类功能。

  3. C++概念与继承无关。概念确定了一个类可以做什么,而不是一个类应该如何实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接