gpt4 book ai didi

c++ - std::integral_constant::value 总是有定义吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:23 28 4
gpt4 key购买 nike

在C++14标准中,std::integral_constant模板定义如下:

template <class T, T v>
struct integral_constant {
static constexpr T value = v;
typedef T value_type;
typedef integral_constant<T,v> type;
constexpr operator value_type() const noexcept { return value; }
constexpr value_type operator()() const noexcept { return value; }
};

它没有说明静态数据成员是否有相应的外联定义,

template <class T, T v>
constexpr T integral_constant<T, v>::value;

我查看了提供此类定义的要求的标准,但找不到,所以我不知道可移植代码是否可以 odr-use value

(在 C++17 中,static constexpr 成员变为隐式内联,使类内声明成为定义。)

最佳答案

这包含在 [contents]/1 中的一揽子声明中定义标准库实现的一般规则:

The C++ standard library provides definitions for the following types of entities: macros, values, types, templates, classes, functions, objects.

非引用类型的变量都是对象,所以这里的value就是一个对象。因此,标准库必须为其提供定义。

C++17 version of this statement在这件事上更直接:

The C++ standard library provides definitions for the entities and macros described in the synopses of the C++ standard library headers.

value 无疑是一个实体,在 C++ 标准库头的概要中进行了描述。因此,必须提供定义。

关于c++ - std::integral_constant<T, v>::value 总是有定义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478899/

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