如何从返回显式类型元组的函数初始化 const 原语

问题描述 投票:0回答:1

我有一个函数,它返回

const
值,而不是像这个问题那样通过引用返回。我想在调用该函数时调用该函数并初始化
const
变量,但这是不可能的。

我尝试声明变量,但只有当变量不是

const
时才有可能。有没有办法在调用后按类型初始化
const
变量?

我尝试了

这个问题的答案
中的auto建议,该建议有效,但令我惊讶的是,当我明确使用
size_t
时它不起作用。为什么没有
auto
就无法工作?使用
auto
后的类型不是会是
size_t
因为这就是函数返回的内容吗?我想使用显式类型以使其更易于阅读。

#include <tuple>
#include <cstddef>
#include <iostream>

using namespace std;

std::tuple<const size_t, const size_t> returnSize_T_Tuple() {
    const size_t i = 2;
    const size_t j = 3;

    return {i, j};
}

std::tuple<const int, const int> returnIntTuple() {
    const int i = 2;
    const int j = 3;

    return {i, j};
}

int main(){
    // const size_t s_i; // error: uninitialized ‘const s_i’ [-fpermissive]
    // std::tie(const size_t x, const size_t y) = returnSize_T_Tuple(); // error: expected primary-expression before ‘const’
    const auto [x,y] = returnSize_T_Tuple();
    const size_t [a,b] = returnSize_T_Tuple(); // error: structured binding declaration cannot have type ‘const size_t’ {aka ‘const long unsigned int’}

    cout << "x = " << x << "; " << "a = " << a;
}
c++ constants stdtuple
1个回答
0
投票

根据P0217R3提出的结构化绑定措辞:

auto 类型说明符还用于引入分解声明(8.5 [dcl.decomp])。

因此,基于此,在这种情况下

auto
并不是真正的类型说明符,它只是声明分解表达式所需的语法,同时作为“将 const 和 ref 限定符粘贴到其上的东西”。

© www.soinside.com 2019 - 2024. All rights reserved.