C++ 标准没有定义“概念”。它定义了“要求”,例如:
EqualityComparable, LessThanComparable, DefaultConstructible,
MoveConstructible, CopyConstructible, MoveAssignable, CopyAssignable,
Destructible, NullablePointer, Hash, TrivialClock, Allocator,
Swappable or Container
但有些要求使用与其他要求不同的语法。例如,allocator
使用swappable
小写斜体 ( allocator ),而我的示例列表中的其他字体则使用驼峰等宽字体,或者如标准中所述,使用类型 ( EqualityComparable
) 的常量。
其他“概念”,如PODType
,在标准中被视为定义。
例如,BinaryPredicate
不是定义为概念,也不是定义;就像使用它的函数的模板名称:
void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);
效果:从迭代器引用的每个连续的相等元素组中删除除第一个元素之外的所有元素,i
在该范围内[first + 1,last)
(*i == *(i-1)
对于没有参数的版本)或pred(*i, *(i - 1))
(对于有谓词参数的版本)适用的范围。仅使迭代器和对已擦除元素的引用无效。
抛出:除非相等比较或谓词抛出异常,否则什么都没有。
复杂性:如果范围[first,last)
不为空,则正好(last - first) - 1
应用相应的谓词,否则不应用谓词。
如您所见,BinaryPredicate
未定义。它只是显示了它如何影响std::unique
.
另一方面,cppreference概念列表是从概念提案中提取的,这是非标准的。此外,cppreference
并不完美,从概念提案的角度来看,并不是每个 wiki 页面都是完整或完整的描述,还有其他模板参数甚至没有出现在标准中,例如UnaryOperator
.