gpt4 book ai didi

c++ - 为什么有一个限制,c++ 'auto' 不能代表多种类型

转载 作者:行者123 更新时间:2023-12-04 00:49:37 25 4
gpt4 key购买 nike

我的意思是,为什么下面的例子不是一个有效的结构:

if (auto x = 2, y = "ab"; x != 0) {
// ...
}

(在我的实际用例中,调用了一些函数而不是 2"ab" 文字。)

std::vector<int> cont1;
std::vector<char> cont2;
for (auto it1 = cont1.begin(), it2 = cont2.begin(); it1 != cont1.end() && it2 != cont2.end(); ++it1, ++it2) {
// ...
}

似乎例如在第一个示例中,Visual C++ 从第一个 2 中为 auto 推导出 int,然后报告:"ab" 无法初始化 int

但是在另一边可以这样写:

if (auto [x, y] = std::make_pair(2, "ab"); x != 0) {
// ...
}

所以在这里,auto代表不同的类型。

除了“为什么”这个答案之外,我想知道是否还有其他解决方法(除了我上面的那个)。

最佳答案

So here, auto stands for different types.

我不会那样解释。

auto代表std::pair<int, char const*> .然而,这里的特殊之处在于这对的名称是 [a, b] , 其中ab指对的内部成员。如果该语言允许明确输入对的类型,我真的很希望。

事实上,ab 不是变量。它们是结构化绑定(bind),并且它们的行为有点不同。尽管这种差异在 C++20 中变得不那么明显了。

真的,auto这里只有一种。

另一种证明我的观点的方法是:

int x = 0, y = 0;
auto [a, b] = std::tie(x, y);

即使它是 auto而不是 auto& , ab是对 x 的引用和 y .并尝试使用 auto&由于 std::tie 的结果,将无法工作是纯右值。


但是,有些地方只有一个auto可能指代不同的事物。

考虑一下:

auto lambda = [](auto... args) { /* ... */ };

在这里,auto...有很多不同的东西,但是 auto...不同于 auto .

关于c++ - 为什么有一个限制,c++ 'auto' 不能代表多种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67573252/

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