gpt4 book ai didi

c++ - 在 C++ 中解构时如何隐藏现有变量?

转载 作者:行者123 更新时间:2023-12-02 06:53:20 25 4
gpt4 key购买 nike

在解构 std::pair 时是否有任何方法可以隐藏现有变量?例如,如果我定义了以下函数:

#include <iostream>
#include <utility>

std::pair<int, int> returns_pair(int a, int b)
{
return std::make_pair(a * a, b * b);
}

void prints_two_variables(int a, int b)
{
std::cout << a << "\n" << b << "\n";
}

然后这个 main 函数工作正常,因为我从返回的 std::pair 中创建了新变量:

int main()
{
int a = 2;
int b = 3;
auto [x, y] = returns_pair(a, b);
prints_two_variables(x, y);
return 0;
}

Output:

4
9

但是我不能使用相同的变量名并隐藏现有变量,因为这会尝试再次实际声明它们:

int main()
{
int a = 2;
int b = 3;
auto [a, b] = returns_pair(a, b);
prints_two_variables(a, b);
return 0;
}

Error:

main.cpp: In function ‘int main()’:
main.cpp:12:15: error: conflicting declaration ‘auto a’
auto [a, b] = returns_pair(a, b);
^
main.cpp:10:9: note: previous declaration as ‘int a’
int a = 2;
^
main.cpp:12:15: error: conflicting declaration ‘auto b’
auto [a, b] = returns_pair(a, b);
^
main.cpp:11:9: note: previous declaration as ‘int b’
int b = 3;
^

我也在没有 auto 的情况下尝试过,但这给出了完全不同的错误:

int main()
{
int a = 2;
int b = 3;
[a, b] = returns_pair(a, b);
prints_two_variables(a, b);
return 0;
}

Error:

main.cpp: In lambda function:
main.cpp:12:12: error: expected ‘{’ before ‘=’ token
[a, b] = returns_pair(a, b);
^
main.cpp: In function ‘int main()’:
main.cpp:12:31: error: no match for ‘operator=’ (operand types are ‘main()::’ and ‘std::pair’)
[a, b] = returns_pair(a, b);
^
main.cpp:12:10: note: candidate: main()::& main()::::operator=(const main()::&)
[a, b] = returns_pair(a, b);
^
main.cpp:12:10: note: no known conversion for argument 1 from ‘std::pair’ to ‘const main()::&’

有什么办法可以实现这一点吗?

最佳答案

Is there any way to destructure a pair, while shadowing existing variables?

没有。结构化绑定(bind)声明始终引入标识符,它不能隐藏或分配现有变量。这是格式错误的:

int i = 4;
auto [i] = std::tuple(5);

出于同样的原因,这是格式不正确的:

int i = 4;
int i = 5;

如果你想做的是覆盖,你可以使用tie并赋值:

std::tie(a, b) = returns_pair(a, b);

这适用于这种情况,但不适用于 returns_pair 可能返回具有两个公共(public)成员的结构的一般情况。

关于c++ - 在 C++ 中解构时如何隐藏现有变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160336/

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