C++ 指针、引用和函数调用
Posted
技术标签:
【中文标题】C++ 指针、引用和函数调用【英文标题】:C++ pointer, reference and function call 【发布时间】:2016-08-15 08:39:08 【问题描述】:我真的是 C++ 新手,我对 C++ 中的指针、地址和函数调用有点困惑。
我有以下函数调用:
config.pages= avail_pages(config.books_path, &config.books.front());
配置类有多个std::vectors<uint16_t>
,例如config.books
保存书籍 ID(即来自 books_path 的文件名)。
现在我想获取第一本书的可用页面(每一页都是一个文件)。因此,avail_pages 将查找 books_path 中的文件和第一本书。
第 1234 本书和第 12 页的有效路径如下所示:books_path/1234/12
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book)
std::vector<uint16_t> pages;
std::string first_book;
first_book = books_path + std::to_string(*book); //pointer or not? string concatenation?
boost::filesystem::path p(first_book);
for (auto i = boost::filesystem::directory_iterator(p); i != boost::filesystem::directory_iterator(); i++)
std::string s = i->path().filename().string();
pages.push_back(std::stoi(s));
return pages;
问题是:如果我使用向量函数front(),它会返回对第一个元素的引用。
我可以这样称呼它:&config.books.front()
吗?
如何将引用传递给函数?我是否必须使用指针,例如:std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book)
?
目前我在调用 front() 函数时遇到错误,这表明我不理解引用/指针的事情。 提前致谢!
【问题讨论】:
它是否总是某个容器的一部分?我的意思是您要引用的值。 为什么将book
参数作为指针传递?此外,不要通过值传递books_path
(这意味着它是复制),而是将其作为常量引用传递(即const std::string& books_path
)。
@JoachimPileborg 感谢您不断参考的提示!
【参考方案1】:
如果您提供配置和书籍的定义会更好。 话虽如此,您需要了解向量函数front()返回对向量持有的前端对象的引用,这意味着您通常会在前端之后调用类成员。 考虑一下:
class book
public :
std::string books_path;
uint16_t book_id;
;
std::vector <book> config;
//your declared function :
std::vector<uint16_t> avail_pages(std::string books_path, uint16_t* book);
//you'd call this as such :
avail_pages(config.front().books_path, &config.front().book_id);
【讨论】:
以上是关于C++ 指针、引用和函数调用的主要内容,如果未能解决你的问题,请参考以下文章