gpt4 book ai didi

c++ - 在 C++ 中使用内联和 constexpr

转载 作者:行者123 更新时间:2023-12-03 22:18:52 25 4
gpt4 key购买 nike

我正在为 FRC 机器人开发一个机器人程序,我很好奇 inline 或 constexpr 或两者是否适合声明常量。

inline constexpr double PI = wpi::math::pi 
inline constexpr double TWO_PI = 2.0 * wpi::math::pi;
inline constexpr units::radian_t PI_RAD = units::radian_t(PI);
inline constexpr units::radian_t TWO_PI_RAD = units::radian_t(TWO_PI);

最佳答案

省略 inline对于在 文件中声明的变量;它只会引起名称冲突。 C++17 添加了对 header 文件的内联变量的支持:无论如何使用它来避免像这样的愚蠢的事情:

#ifndef HEADER_HH
#define HEADER_HH
#include<algorithm>
/* inline */ constexpr int bound=30;
inline int clip(int x) {return std::min(x,bound);}
#endif

#include 的任何程序s 两个不同源文件中的此 header 格式错误,不需要诊断(!),因为 std::min通过引用获取其参数,因此 ODR 使用内部链接 bound这是每个翻译单元中的不同变量,拒绝对 clip 进行单一定义。 .

不过,在 C++20 中,您可以使用 export constexpr (或者,对于模块私有(private)变量, extern constexpr )在一个 module 接口(interface)单元中,不需要 inline .

所有这些都适用于正常 const (如果初始化程序不是常量表达式,则必须使用),额外的好处是 inline让你定义一个非 constexpr static类中的类成员(即使在源文件中也很有用;将放在匿名命名空间中以防止在这种情况下发生冲突)。

关于c++ - 在 C++ 中使用内联和 constexpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959928/

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