C ++ - 命名空间与静态函数

时间:2011-10-13 14:42:26

标签: c++

  

可能重复:
  Namespace + functions versus static methods on a class

我想将类似的功能组合起来。我可以用两种方式之一做。对我来说,它们只是语法上的差异......最后它并不重要。这种观点准确吗?

命名空间:

namespace util
  {
  void print_array(int array[])
    {
    int count = sizeof( array ) / sizeof( array[0] );
    for (int i = 0; i <= count; i++) cout << array[i];
    }
  }

班级:

class Util
  {
  public:
    static void print_array(int array[])
      {
      int count = sizeof(array);
      for (int i = 0; i <= count; i++) cout << array[i];
      }
  };

使用

进行通话
Util::print_array()  // Class

util::print_array()  // Namespace

2 个答案:

答案 0 :(得分:5)

第二种方式是愚蠢而完全无稽之谈。类不是名称空间,不应该这样使用。

此外,代码错误,sizeof(array)将无法返回您的想法。

答案 1 :(得分:3)

有一些不同之处在于,第二种方式允许你做一些(荒谬的)第一种方式没有的东西:

  • 使用第二种方式,您可以使用Util foo;Util* foo = new Util();创建Util实例。
  • 您还可以使用Util作为模板的类型参数(或允许使用类型名称的任何其他位置)。所以你可以例如创建一个vector<Util>
  • 您还可以使用sizeof(Util)计算Util实例的大小。

由于你没有理由想要做任何一件事,你应该使用第一种方式。通常,在没有您希望实例化的情况下,您几乎应该总是重新考虑使用类。

在一个不相关的注释中:在您的代码中sizeof(array)相当于sizeof(int*),几乎肯定不会按照您的想法执行(即告诉您数组中有多少个元素。)