gpt4 book ai didi

c++ - 除了概念之外,在类型约束中禁止类型特征的理由是什么?

转载 作者:行者123 更新时间:2023-12-05 04:19:14 25 4
gpt4 key购买 nike

语言规范在引入概念时隐式禁止类型特征 to be used在类型约束上下文中代替概念:

#include <type_traits>

// doesn't work because std::is_arithmetic_v is not a type
template <std::is_arithmetic_v T> struct A{};

// legal, but doesn't restrict T, but expects an object of type std:: is_arithmetic
template <std::is_arithmetic T> struct B{};

我依稀记得在规范过程中,如果不引入新的 concept,人们就无法让 Concepts 的概念发挥作用。关键字和定义概念的相应机制。

但是,在A的定义中, 构造 template <bool-expression ID>从来都不是合法的,因此允许它不会与其他语言结构发生冲突。

那么,是什么阻碍了直接允许这样的构造而不是必须 introduce a lot of wrapper-Concepts for already existing std type traits — 更不用说自定义类型特征了?


注意:很明显写一个泛型concept包装现有类型特征的模板是微不足道的。这不是如何重用旧特征的问题,而是为什么语言一开始就不允许这样做的问题?甚至可能而不是引入新关键字。

最佳答案

类型特征的普通求值语义拒绝在它们之间定义任何有意义的关系;缺少包含 将阻止约束声明的许多生产性使用。例如:

template<nonstd::is_semiregular_v T> void f(T);
template<nonstd::is_regular_v T> void f(T);
void g(int i) {
f(i); // error: ambiguous
}

具有概念的相应代码选择具有更强概念的重载(这可能具有更好的语义或更高效)。

关于c++ - 除了概念之外,在类型约束中禁止类型特征的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74888996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com