【问题标题】:In c++, Is it advisable to use pointer to vector or should we always use reference to vector? [closed]在 C++ 中,建议使用指向向量的指针还是应该始终使用对向量的引用? [关闭]
【发布时间】:2017-10-30 04:10:31
【问题描述】:

根据 Google C++ Style guide,

C/C++ 函数的参数要么是函数的输入,要么是函数的输出,或者两者兼而有之。输入参数通常是值或 const 引用,而输出和输入/输出参数将是指向非 const 的指针

事实上,在 Google 代码中,输入参数是值或 const 引用,而输出参数是指针,这是一个非常严格的约定。输入参数可以是 const 指针

reference 应该始终保持不变。如果我有一个要更新的对象向量会发生什么?我应该遵循指南并使用指向矢量的指针吗?如果对象数据也将更新,会发生什么?我是否应该使用指向对象指针向量的指针,例如std::vector*?我觉得这个约定很奇怪。

我是否误解了它,或者这是正确的做法(这意味着这确实是指南告诉人们要做的)?

【问题讨论】:

  • (几乎总是) 永远不要使用指向向量的指针。 Vector 已经拥有指向其数据的指针。
  • @Galik std::vector 怎么样?
  • 如果您有问题,我会添加指南中的文字。也许他们列出了一些优点和缺点。坦率地说,我不认为这是一个好主意。
  • 不,只需 std::vector<Object> 并使 Object 可移动(除非您需要多态性)
  • 如果您打算在 Google 找到一份工作,那么您应该采用他们的风格指南。如果您没有在 Google 找到工作的计划,他们的风格指南与 Joe Q Random 的风格指南一样可信。在适当的时候传递对向量的可变引用并没有错。

标签: c++ pointers vector


【解决方案1】:

google 风格指南指出,您永远不应该将非常量引用作为函数的参数,因为他们希望在调用时明确标记“可能被修改的参数”。

根据该规则,如果您的函数采用将要修改的数据向量,则它必须采用指向它的指针。

另一方面,gsl(C++ 核心指南)提供了一个 span<T> 类型,如果您只修改 元素 而不是该向量具有哪些元素,这是一个更好的选择在很多情况下都可以使用vector<T>*

这在精神上(如果不是实践的话)与谷歌风格指南不一致。

哪个是正确的只是一个意见问题,因此在堆栈溢出时偏离主题。

但是,不要仅仅因为“google”的风格指南就认为它们在某种程度上是完美的。即使它们对谷歌来说是完美的,谷歌也是一家奇怪的公司。适合他们的开发环境可能并不适合地球上大多数 C++ 开发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多