C++、指针、引用、从一个函数传递到另一个函数、std::vector、std::string

标签 c++ string pointers vector reference

我有一个关于指针和引用的特定问题,包括 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/

相关文章:

c++ - 柠檬图库的边权重

c++ - 该声明的含义 count[array[i]]

java - 我正在尝试从字符串中随机抽取一个单词。 java

数组中的字符指针未释放

c - 关于C中结构体指针

c++ - 没有初始化的 OMP for 循环

c++ - Map结构也支持排序?

java - 关于 Java String 美元到美分的转换

C++ 方法需要引用,无法让 Cython 提供引用

对象构造函数访问中对象的 C++ 静态 vector ?