我有一个函数,它返回
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;
}
根据P0217R3提出的结构化绑定措辞:
auto 类型说明符还用于引入分解声明(8.5 [dcl.decomp])。
因此,基于此,在这种情况下
auto
并不是真正的类型说明符,它只是声明分解表达式所需的语法,同时作为“将 const 和 ref 限定符粘贴到其上的东西”。