c++ - 向量vs string[] 传递给函数时
问题描述
我是 C++ 的新手,我正在尝试以一种易于阅读的方式将一组非可变数量的字符串传递给一个存在于单独类文件中的函数:
//main in Caller.cpp
int main()
{
string details[] = {"Name","Height","Weight"};
/* vector<string> detailsV = {"Name","Height","Weight"};
* Would like to use a vector but can't do this because vector cannot be
* initialized to = {...} in C++
*/
Person p = Person();
p.inspectDetails(details);
}
//Person class in Person.cpp
void inspectDetails(string details [])
{
int sz = sizeof(details); // this will result in details = "Name" only
}
我试过了:
//Person class in Person.cpp
<template size_t N>
void inspectDetails(string (&details)[N])
{
int sz = sizeof(details);
}
但是,我现在不知道如何让 Caller 类中的 main 知道<template size_t N>
这可能允许我使用非显式数量的数组。inpectDetails
尝试以这种方式调用时,我似乎收到“没有合适的 std:string[3] 到 std:string 的转换”的错误。
将非显式数量的字符串集合传递给 Caller 类之外的函数的最佳方法是什么,同时保持像Collection c = {"...", "...", "..."}
C++ 中那样对集合内容进行硬编码的能力?有没有一种更简单的方法可以将完整的字符串集合传递给一个带有指向向量的指针或类似东西的函数?
解决方案
如果您需要更改其内容,请使用 astd::vector< std::string >
并通过引用传递它,如果您不需要更改它们,请使用 const 引用。这是最简单、最灵活、最清晰的方式。
因此:
void inspectDetails( std::vector< std::string > & details );
std::vector< std::string > details = { "Name","Height","Weight" };
inspectDetails( details );
推荐阅读
- debugging - 如何在 Erlang 中调试进程
- clang-tidy - clang-tidy:在 throw 之前由于缺少 free 而检测内存泄漏的检查是什么?
- rest - 使用不透明的访问令牌会使我的服务器有状态吗?
- c# - 在 ASP.NET MVC 中没有为此对象定义无参数构造函数
- python - 为什么它一直说“在处理上述异常期间,发生了另一个异常:”
- java - JDK 11.0.2 - 无法在 ECLIPSE 中派生模块描述符
- c - 尽管初始化变量,但它正在获取垃圾值
- android - 如何使用导航组件处理片段内的向上按钮
- reactjs - 为什么我的存储库在运行 npm run deploy 后会发生变化?
- laravel - 如何在 laravel 管理列表显示中显示帖子的所有者?