gpt4 book ai didi

c++ - 无法将从函数返回的 vector 传递给需要引用方法的函数

转载 作者:行者123 更新时间:2023-11-28 02:38:48 25 4
gpt4 key购买 nike

我有这个功能...

std::vector<int> GetAVector();

用作此函数的参数:

void ExpectingAVector(std::vector<int> &vec);

所以这个结构:

ExpectingAVector(GetAVector());

可以在 Visual Studio 2012 上编译,但不能在 G++、Eclipse Indigo、Ubuntu 12.04 上编译

错误信息:注意:参数 1 没有从‘std::vector’到‘std::vector&’的已知转换

如果 g++ 不支持这个,我有什么选择?所有可能的替代方案都不那么优雅

a) 声明一个 vector 并通过对 GetAVector 和 ExpectingAVector 的引用传递它?
b) 让 GetAVector 返回指向 vector 的指针并让 ExpectingAVector 接受它?杂乱清理
c) 让 ExpectingAVector 接受 vector 对象并接受低效率?

执行此操作的最佳方法是什么?

最佳答案

ExpectingAVector( GetAVector() );
|
+-------------Creates a temporary vector<int> object (rvalue)

使用:

void ExpectingAVector(const std::vector<int> &vec);

临时对象不能绑定(bind)到非常量引用

这是 Visual C++ 上的扩展,允许这种行为,可以通过一些标志禁用 (我不知道是哪些)

您还可以将移动语义与 void ExpectingAVector(std::vector<int> &&vec ) { } 结合使用如果您对 C++11 没问题。

关于c++ - 无法将从函数返回的 vector 传递给需要引用方法的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667753/

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