gpt4 book ai didi

c++ - 在单个 auto 语句中声明多个变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:26 26 4
gpt4 key购买 nike

考虑

auto x=foo(), y;

这合法吗? (我想它是并且暗示 yx 的类型相同。)虽然这个特定示例可能不是很有用,但请考虑

template<typename some_type>
void func(some_type const&x, some_type const&y)
{
for(auto i=std::begin(x),j=std::begin(y); i!=std::end(x) && j!=std::end(y); ) {
...
}
}

这里,ij 都是相同的类型(因为它们都派生自对相同类型对象的相同类型的操作),所以这看起来很完美安全且明智,因为它避免声明适当的类型(最好使用 decltype() 来完成,即再次通过推导)。

但是,intel 的编译器(版本 14.0.1)警告我

warning #3373: nonstandard use of "auto" to both deduce the type from an initializer and to announce a trailing return type

那么,我应该如何看待这个警告? auto 的这种用法有什么问题吗?


编辑 上面截取的简单代码确实不会触发警告。然而,代码看起来非常相似:

struct Neighbour { ... };
typedef std::vector<Neighbour> NeighbourList;
NeighbourList const&A;
NeighbourList const&B;
...
const auto K = std::max(A.size(),B.size());
auto k = 0*K;
for(auto iA=A.begin(),iB=B.begin(); k!=K; ++k,++iA,++iB)
...

(for 循环存在于类模板的成员方法中)

最佳答案

auto x=foo(), y;

不,这是非法的。

我无法重现您的警告,因为 ij 具有相同的类型。该部分是法律代码。

关于c++ - 在单个 auto 语句中声明多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19690547/

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