gpt4 book ai didi

c++ - 静态 constexpr 成员似乎不支持 std::min

转载 作者:太空狗 更新时间:2023-10-29 20:55:54 24 4
gpt4 key购买 nike

<分区>

这里有一个问题,我不太清楚其原因,但幸运的是,其解决方法很简单。

考虑以下代码(让我称它为我的 main.cpp):

#include <algorithm>

struct Foo {
static constexpr float BAR = .42;

float operator()() const noexcept {
float zero = .0;
return std::min(zero, BAR);
}
};

int main() {
Foo foo;
foo();
}

当我尝试编译它时,出现错误:

foobar:~/stackoverflow$ g++ -std=c++11 main.cpp
/tmp/ccjULTPy.o: In function 'Foo::operator()() const':
main.cpp:(.text._ZNK3FooclEv[_ZNK3FooclEv]+0x1a): undefined reference to `Foo::BAR'
collect2: error: ld returned 1 exit status

如果我使用以下语句,也会发生同样的情况(很明显):

return std::min(zero, Foo::BAR);

下面是上述示例的略微修改版本。
这个编译没有错误,即使我仍然指的是 BAR 成员:

#include <algorithm>

struct Foo {
static constexpr float BAR = .42;

float operator()() const noexcept {
float zero = .0;
float bar = BAR;
return std::min(zero, bar);
}
};

int main() {
Foo foo;
foo();
}

我没有成功理解为什么后一个版本编译正常而前一个版本以错误结束。
据我所知,这两个版本都是正确的并且应该编译,但我强烈怀疑我在这里遗漏了一些重要的东西。

有什么建议吗?

这里是我的编译器版本:g++ (Debian 5.3.1-5) 5.3.1 20160101

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