微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我不能使用 std::tie 从基于 for 循环的范围内的成对向量中解压缩值

如何解决为什么我不能使用 std::tie 从基于 for 循环的范围内的成对向量中解压缩值

谁能解释一下为什么会出现这个编译错误

错误函数模板“std::tie”不是类型名称 这工作正常。 领带(str1,str2)=pairval;

#include<iostream>
#include<vector>
#include<tuple>

using namespace std;

int main()
{

    vector<pair<string,string>>v ={{"Hello","Task"}};

    pair<string,string> p = {"Hello","Task"};

    string str1,str2;

    for(auto & pairval : v)
    {
        tie(str1,str2) = pairval;
        cout<<pairval.first<<" "<<pairval.second<<endl; //working
    }

    for(auto & [str1,str2]: v)
    {
       cout<<str1<<" "<<str2<<endl; //working
    }
    
    for(tie(str1,str2):v) // compilation error : function template "std::tie" is not a type name
    {
           cout<<str1<<" "<<str2<<endl;   
    }
    return 0;
}

解决方法

检查 range-for-loop 定义:

for ( range_declaration : range_expression ) loop_statement

这里的 range_declaration 需要是一个声明std::tie(str1,str2) 不是声明。声明类似于 int xauto&& y

有关范围循环 https://en.cppreference.com/w/cpp/language/range-forhttps://en.cppreference.com/w/cpp/language/declarations 的声明,请参阅 cppreference。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。