gpt4 book ai didi

c++ - 是否应该定义静态 constexpr 类成员变量,即使它们未被 ODR 使用?

转载 作者:太空狗 更新时间:2023-10-29 21:39:06 27 4
gpt4 key购买 nike

假设头文件中有以下类定义:

class foo
{
public:
static float constexpr MY_VALUE{100.f};
};

在我的 CPP 文件中,我有这个:

float constexpr foo::MY_VALUE;

但是,如果 foo::MY_VALUE 从未被 ODR 使用,我应该定义它吗?在不使用 ODR 时定义它是否有任何伤害?始终为类静态 constexpr 变量提供这样的定义是否是一个好的经验法则?

最佳答案

这是基于 IMO 的一点意见,但试图保持技术性......从定义上看,你不必这样做,除非它是 ODR 使用的,所以它看起来微不足道。不。此外,用户始终可以为他们需要的上下文提供定义。

至于经验法则,也可以引用:

3.2 One definition rule. p3

A variable x whose name appears as a potentially-evaluated expression ex is odr-used unless x satisfiesthe requirements for appearing in a constant expression (5.19) and, if x is an object, ex is an element ofthe set of potential results of an expression e, where either the lvalue-to-rvalue conversion (4.1) is appliedto e, or e is a discarded-value expression (Clause 5). [...]

取自c++14 draft .

所以我想说:如果您预测您的常量将在非常量上下文中使用,我会为方便起见提供一个定义。如果不是,那就不是。但这是一个必须做出的设计决定。

关于c++ - 是否应该定义静态 constexpr 类成员变量,即使它们未被 ODR 使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33758936/

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