gpt4 book ai didi

c++ - 用 stoi 声明的 Const Int 不被认为是 const

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:00 24 4
gpt4 key购买 nike

我使用 CGAL 编写了一个简单的测试程序,遇到了以下问题:

点在上面定义为

typedef K::Point_d Point;

但我认为这无关紧要。

当我尝试按如下方式编译程序时:

const int size = 10;
Point P[size];

g++ 这样做没有问题。

如果我尝试编译:

const int size = stoi("10");
Point P[size]

出现以下错误

error: variable length array of non-POD element type 'Point' (aka 'Point_d<Cartesian_d<double,
CGAL::Linear_algebraCd<double, std::__1::allocator<double> > > >')

为什么在从字符串中检索时将大小视为变量而不是常量?

最佳答案

C++ 将特定事物定义为常量表达式,这些表达式定义 在编译时已知 - 参见 constant_expression .

一般来说,未定义为 constexpr 的函数都不是,无论您传递给它们什么。您可以尝试强制执行此操作:

#include<string>

constexpr int x = std::stoi("10");
int main() {
return 0;
}

但是你会发现这仍然会导致错误:

error: call to non-constexpr function 'int std::stoi(const string&, std::size_t*, int)'

所以,你运气不好,因为 stoi 不是常量表达式。如果你真的坚持你可以使用你自己的实现覆盖它,例如 How do I convert a C string to a int at compile time? .

关于c++ - 用 stoi 声明的 Const Int 不被认为是 const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50226756/

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