gpt4 book ai didi

c++ - 使用非 constexpr 函数设置 constexpr 变量(但可以在编译时计算)

转载 作者:行者123 更新时间:2023-11-30 02:26:46 26 4
gpt4 key购买 nike

标题.h

extern constexpr double sqrt_of_2;
extern constexpr double sqrt_of_1_2;
double sqrt(double x);

主要.cpp

#include <header.h>

int main() {
int n;
scanf("%d", &n);
printf("%lf %lf\n", sqrt_of_2, sqrt(n));
return 0;
}

源代码.cpp

#include <header.h>

double sqrt(double x) {
// complex bits of math
// huge function
// must not be in header for speedy compilation
// will call other small non-constexpr functions in this file
}

constexpr double sqrt_of_2 = sqrt(2.0);
constexpr double sqrt_of_1_2 = sqrt(0.5)

这显然行不通。

我无法在 source.cpp 中为 sqrt 添加 constexpr,因为它与 header.h 中的声明不匹配。我也不能在 header.h 中为 sqrt 添加 constexpr 因为 constexpr 意味着 inline,我将需要将 source.cpp 中的所有内容传输到 header.h。

这可能吗?

最佳答案

没有。这就是为什么要创建 constexpr 的全部要点——创建函数来封装编译时函数。

如果没有完成编译时计算,编译代码的编译单元是没有意义的。

目标文件旨在简单地连接起来以解决链接时依赖性。编译时计算必须在编译时定义,因此必须在编译时单元中实现。

关于c++ - 使用非 constexpr 函数设置 constexpr 变量(但可以在编译时计算),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42464405/

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