gpt4 book ai didi

c++ - 我如何将 STL 集作为函数参数传递

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:58 24 4
gpt4 key购买 nike

这是我的代码的简化版本,基本上我试图将 STL SET 作为函数参数传递,但我无法这样做。我收到以下错误

error : cannot convert 'std::set,std::allocator to 'int' for arguement '1' to void foo(int)

error: template arguement 1 is invalid

error: template arguement 2 is invalid

error: template arguement 3 is invalid

这是产生错误的代码示例

#include <iostream>
#include <set>
using namespace std;

void foo(set<foobar>);

class foobar
{
public:

int x;

};

int main()
{

set<foobar> foobar_set;

foo(foobar_set);


}

void foo(set<foobar> foobar_set)
{

}

问题:如何将 STL 集作为函数参数传递??

STL Set 存在多长时间,局部作用域还是全局作用域??

最佳答案

让我们按照编译器(主要)的方式来考虑事情的顺序。当我们查看了这么多代码时:

#include <iostream>
#include <set>
using namespace std;

void foo(set<foobar>);

...foobar 是什么类型?简短回答:根据我们目前所见,我们没有任何线索——编译器也没有。移动 foo 的声明在 foobar 的定义之后(取决于它)。

class foobar
{
// ...
};

void foo(set<foobar>); // now the compiler knows what `foobar` means

int main()
{
set<foobar> foobar_set;

foo(foobar_set); // so now this can work
}

现在补充一点:很有可能你真的不想通过 set<whatever>按值 - 这将导致复制整个集合。您可能想通过 const 引用传递它:

void foo(set<foobar> const &);

...并确保您对 foo 的定义匹配:

void foo(set<foobar> const &) {}

对于“小型”类型(例如 charshortint),您通常希望按值传递。对于(可能)与 set<whatever> 一样大的东西通过 ( const) 引用通常是首选。它并不总是更好,但通常至少是可以接受的。在适当的情况下,按值传递可能会更快,但也可能会更慢 -- 有时会慢 很多,所以除非你确定你知道自己在做什么,否则传递 const引用通常是安全的选择。

关于c++ - 我如何将 STL 集作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19969140/

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