可能重复:
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
答案 0 :(得分:5)
第二种方式是愚蠢而完全无稽之谈。类不是名称空间,不应该这样使用。
此外,代码错误,sizeof(array)
将无法返回您的想法。
答案 1 :(得分:3)
有一些不同之处在于,第二种方式允许你做一些(荒谬的)第一种方式没有的东西:
Util foo;
或Util* foo = new Util();
创建Util实例。Util
作为模板的类型参数(或允许使用类型名称的任何其他位置)。所以你可以例如创建一个vector<Util>
。sizeof(Util)
计算Util实例的大小。由于你没有理由想要做任何一件事,你应该使用第一种方式。通常,在没有您希望实例化的情况下,您几乎应该总是重新考虑使用类。
在一个不相关的注释中:在您的代码中sizeof(array)
相当于sizeof(int*)
,几乎肯定不会按照您的想法执行(即不告诉您数组中有多少个元素。)