gpt4 book ai didi

c++ - 如何为 constexpr 返回一个元组

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:01 25 4
gpt4 key购买 nike

找了好久,还是不太明白。有人可以告诉我如何在常量表达式中返回元组吗?这是代码:

#include <tuple>
constexpr std::tuple<int, int> ret2 () {
int a = 1;
int b = 2;
return std::make_tuple(a, b);
}

constexpr int ret1 () {
int a = 0;
int b = 0;
std::tie(a, b) = ret2();
return a + b;
}

constexpr auto tmp = ret1();

clang++ -std=c++14 -o test test.cpp

test.cpp:15:16: error: constexpr variable 'tmp' must be initialized by a constant expression
constexpr auto tmp = ret1();
^ ~~~~~~
test.cpp:11:17: note: non-constexpr function
'operator=<std::__1::tuple<int, int>, void>' cannot be used in a constant expression
std::tie(a, b) = ret2();
^
test.cpp:15:22: note: in call to 'ret1()'
constexpr auto tmp = ret1();
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/tuple:899:9: note:
declared here
operator=(_Tuple&& __t) _NOEXCEPT_((is_nothrow_assignable<base&...
^
1 error generated.

clang --version

Apple LLVM version 9.0.0 (clang-900.0.38)
Target: x86_64-apple-darwin17.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

我试过将其更改为 std::tuple<int&, int&> ,并使用 std::ref等等...我似乎找不到正确的顺序。

此外,调用 std::get 2x 会在代码中变得冗长并且可能在运行时造成浪费。有没有办法通过一次调用获得两个值 - 如图所示?

最佳答案

您不能使用 std::tuple::operator= 因为它不是 constexpr。您的示例可以转换为:

constexpr std::tuple<int, int> ret2 () {
int a = 1;
int b = 2;
return std::make_tuple(a, b);
}

constexpr int ret1 () {
constexpr auto t = ret2();
return std::get<0>(t) + std::get<1>(t);
}

constexpr auto tmp = ret1();

和原来的一样,虽然我不确定它是否满足你的真正需求。

关于c++ - 如何为 constexpr 返回一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943190/

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