gpt4 book ai didi

C++ const int 不可用于常量表达式

转载 作者:行者123 更新时间:2023-11-27 23:50:07 25 4
gpt4 key购买 nike

我正在尝试初始化一个数组,我通过外部函数为其提供大小。

外部函数计算 vector 的大小并将它们成对输出。

// The function has been simplified for the sake of the question
std::pair< int, int> calculate_size (
const double in1,
const double in2
)
{
int temp1 = int(in1/in2);
int temp2 = int(in2/in1);
std::pair< int, int> output = make_pair(temp1, temp2);
return output;
}

然后,在其他地方,我使用 tie 提取上述函数的输出以生成数组的大小(我正在使用 C++11 进行编译):

// Extract sizes
int tempSize1, tempSize2;
tie(tempSize1, tempSize2) = calculate_size (in1, in2);
const int constSize1 = temp1;
const int constSize2 = temp2;

// Initialize vector (compiler error)
std::array<double, constSize1> v1;
std::array<double, constSize2> v2;

编译器给出以下错误:“constSize1”的值不可用于常量表达式

但是,我看不出我做错了什么。根据这个C++ reference网站,他们带来的例子似乎正是我在做的。

我错过了什么?有更好的方法吗?

编辑:

评论表明 constexpr 是我需要的。如果我在不更改其余部分的情况下使用它,错误消息将转移到 constexpr 行,但本质上保持不变:

// Modified to use constexpr
int temp1, temp2;
tie(temp1,temp2) = calculate_samples (in1, in2);
constexpr int constSize1 = temp1;
constexpr int constSize2 = temp2;

错误:“temp1”的值在常量表达式中不可用

最佳答案

如果您需要 array(与 vector 相对),那么将函数标记为 constexpr 就可以很好地工作。

有关工作代码,请参见下文。这是在 Coliru 上运行的代码:http://coliru.stacked-crooked.com/a/135a906acdb01e08 .

#include <iostream>
#include <utility>
#include <array>

constexpr std::pair<int, int> calculate_size (
const double in1, const double in2) {
return std::make_pair(
static_cast<int>(in1 / in2),
static_cast<int>(in2 / in1));
}

int main() {
constexpr auto sizes = calculate_size(4, 2);

std::array<double, sizes.first> v1;
std::array<double, sizes.second> v2;

std::cout << "[Size] v1: " << v1.size() << " - v2: " << v2.size() << "\n";
}

打印:[Size] v1: 2 - v2: 0

关于C++ const int 不可用于常量表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47139173/

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