我有一个关于指针和引用的特定问题,包括 std::vector 和 std::string。一些问题在下面的代码片段中,一些在下面。
我基本上有这个代码
//first of all: is this function declaration good?
//or shoudl I already pass the std::vector in another way?
//I'm only reading from it
void func(const std::vector<std::string>& vec)
{
//I need to call otherFunc(void*) with a single element from vec:
//otherFunc(void* arg);
//with arg being a void* to vec[0]
}
我的 IDE 告诉我只有 &*vec[0]
可以作为 otherFunc
的参数,但是它不能编译...
传递此类参数的最佳方式是什么?
最佳答案
这是一个很好的声明,只要该函数不打算修改 vector 即可。它比按值传递更有效,因为它避免了复制 vector - 一种需要内存分配的昂贵操作。
但是,另一个函数需要一个非常量指针。如何处理取决于它是否可能修改数据。
如果它不会(正如您说“我只是从中读取”时暗示的那样),那么选项是:
- 将其更改为
otherFunc(void const * arg)
提供更有力的保证不会,或者 - 删除
const
资格const_cast<void*>
调用时
请注意 &*vec[0]
不会编译;你想要vec[0].c_str()
获取指向第一个字符串数据的 C 兼容指针,假设这是您需要的。
如果它可能会修改 vector ,那么您将不得不做其他事情,因为没有合法的方法来修改 std::string
通过指向其数据的指针。最好的选择可能是使用 std::vector<char>
而不是 std::string
,但这完全取决于函数的作用。
关于C++、指针、引用、从一个函数传递到另一个函数、std::vector、std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108649/