C++类中static成员函数与名称空间中的static函数比较

文章探讨了C++中类的static成员函数和名称空间内的static函数在作用域上的不同。类的static成员函数具有全局作用域,可以在任何地方调用,而名称空间内的static函数的作用域仍限制在当前文件内。实验表明,类和名称空间对static函数的处理方式存在显著区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       我们已经知道,如果在类的声明中声明一个static成员函数,那么它将禁止使用this指针,并且仍然具有全局作用域。那么这种全局作用域的特性是否适合名称空间呢,我们知道类的性质和名称空间很相似。

实验0:使用名称空间:

//head.h

#include<iostream>

struct qiqi

{

int a;

int b;

};

namespace duidui

{

static void show(struct qiqi x);

static int back(int y);

}

//function.cpp

#include<iostream>

#include"head.h"

namespace duidui

{

   void show(struct qiqi x)

{

std::cout << x.a << std::endl;

std::cout << x.b << std::endl;

}

   int back(int m)

   {

   return m * 2;

   }

}

//main

#include<iostream>

#include"head.h"//包含static函数的声明

int main(void)

{

struct qiqi mm = {12,13};

duidui::show(mm);//编译器提示错误:静态函数void duidui::show(qiqi)已声明,但未定义。

std::cout<<duidui::back(20);//编译器提示错误:静态函数int duidui::back(int)已声明,但未定义。

return 0;

}

实验1:使用类:

//head.h

#include<iostream>

struct qiqi

{

int a;

int b;

};

class duidui

{

  private:

     int ho;

  public:

  static void show(struct qiqi x);

  static int back(int y);

};//仅仅改变了这里

//function.cpp

#include<iostream>

#include"head.h"

   void duidui::show(struct qiqi x)

{

std::cout << x.a << std::endl;

std::cout << x.b << std::endl;

}

   int duidui::back(int m)

   {

   return m * 2;

   }

//main

#include<iostream>

#include"head.h"

int main(void)

{

struct qiqi mm = {12,13};

duidui::show(mm);

std::cout<<duidui::back(20);

return 0;

}//正确运行。

以上实验说明,类中的static成员函数与名称空间中的static函数作用域是不同的。类中的static成员函数具有全局作用域,而名称空间中的static函数仍然同C语言规定的一样,作用域为本文件内。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值