C++中显示声明与隐式声明的使用与区别小结

 更新时间:2025年12月19日 10:11:14   作者:wangnaisheng  
本文主要介绍了C++中的声明,分为显示声明和隐式声明两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在C++中,声明(declaration)是告诉编译器标识符的类型和名称的过程。根据声明的方式,可以分为显示声明(explicit declaration)和隐式声明(implicit declaration)。下面分别解释这两种声明方式及其使用场景。

显示声明

在类声明中只给出成员函数的原型,而将成员函数的定义放在类的外部。

class Score{
public:
	inline void setScore(int m, int f);
	inline void showScore();
private:
	int mid_exam;
	int fin_exam;
};

inline void Score::setScore(int m, int f) 
{
	mid_exam = m;
	fin_exam = f;
}

inline void Score::showScore()
{
	cout << "期中成绩: " << mid_exam << endl;
	cout << "期末成绩:" << fin_exam << endl;
}

显示声明是指程序员明确地写出变量、函数或其他实体的类型和名称。这是最常见的声明形式,也是推荐的做法。通过显示声明,代码更加清晰易懂,同时避免了许多潜在的错误。

变量的显示声明

int a; // 声明一个整型变量a
double b; // 声明一个双精度浮点数变量b

函数的显示声明

// 函数原型声明
void printHello();

// 函数定义
void printHello() {
    std::cout << "Hello, World!" << std::endl;
}

类成员的显示声明

class MyClass {
public:
    int myVariable;  // 成员变量的显示声明
    void myFunction(); // 成员函数的显示声明
};

隐式声明

将成员函数直接定义在类的内部

class Score{
public:
	void setScore(int m, int f)
	{
		mid_exam = m;
		fin_exam = f;
	}
	void showScore()
	{
		cout << "期中成绩: " << mid_exam << endl;
		cout << "期末成绩:" << fin_exam << endl;
	}
private:
	int mid_exam;
	int fin_exam;
};

隐式声明通常指的是当编译器遇到未声明的标识符时,会尝试根据上下文来推断该标识符的类型。在C++中,这种情况主要发生在以下几种情形:

函数调用前没有声明

如果在函数调用之前没有提供函数原型或定义,那么C++允许进行隐式函数声明。这种情况下,默认假定函数返回int类型。

foo(42); // 如果foo在此处之前没有被声明或定义,这将是一个隐式的int类型的函数声明

但是,从C++17开始,这个行为已经被视为弃用,并且在未来的标准中可能会被移除。因此,总是建议在调用函数之前先声明或定义它。

类模板实例化

当使用类模板时,如果没有显式指定模板参数,编译器可能尝试通过传递给构造函数或方法的实际参数来推导出模板参数。

std::vector v; // 如果v之后立即被初始化为某种特定类型,如v.push_back(0),则这里v会被推导为std::vector<int>

自动类型推导

现代C++引入了auto关键字,允许编译器根据初始化表达式自动推导变量的类型。

auto i = 42; // i 的类型将被推导为 int

总的来说,虽然C++提供了某些形式的隐式声明机制,但为了提高代码的可读性和维护性,以及减少潜在的错误,最佳实践通常是优先使用显示声明。特别是在团队开发或者大型项目中,良好的声明习惯对于保持代码质量至关重要。

显示声明和隐式声明区别

显示声明 (Explicit Declaration)

  1. 明确性:程序员必须清晰地指定标识符的类型、名称以及其他相关信息。
  2. 位置:通常出现在使用之前,确保编译器已经知道该标识符的信息。
  3. 可读性和维护性:代码更易于理解,因为所有必要的信息都直接可见。
  4. 错误预防:有助于减少由于类型不匹配或未定义行为导致的错误。
  5. 例子
    • 变量: int x;
    • 函数: void myFunction(int arg);

隐式声明 (Implicit Declaration)

  1. 自动推断:编译器基于上下文尝试自动推断标识符的类型和其他属性。
  2. 位置:可能出现在使用之后,或者通过其他机制(如模板实例化)间接完成。
  3. 潜在的不确定性:可能导致代码难以阅读,特别是当多个地方依赖于隐式规则时。
  4. 风险:增加了出现意外行为的风险,尤其是当编译器对某些特性进行默认假设时。

总结

  • 显示声明是推荐的做法,因为它提供了更高的透明度和控制力,使得代码更加健壮和易于维护。
  • 隐式声明则更多地依赖于编译器的能力来推断类型,这虽然可以简化某些情况下的编码,但同时也可能引入一些不确定性和潜在的错误。

到此这篇关于C++中显示声明与隐式声明的使用与区别小结的文章就介绍到这了,更多相关C++显示声明与隐式声明内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++用boost.signal实现多播委托

    C++用boost.signal实现多播委托

    这篇文章介绍了C++用boost.signal实现多播委托的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C语言栈顺序结构实现代码

    C语言栈顺序结构实现代码

    一个能够自动扩容的顺序结构的栈 ArrStack 实例 (GCC编译),有需要的朋友可以参考一下
    2013-10-10
  • 使用C++调用Python代码的方法步骤

    使用C++调用Python代码的方法步骤

    这篇文章主要介绍了使用C++调用Python代码的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C语言实现清空指定文件夹中所有文件的方法

    C语言实现清空指定文件夹中所有文件的方法

    这篇文章主要介绍了C语言实现清空指定文件夹中所有文件的方法,实例分析了C语言实现文件删除的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C++实现数据保留小数点后两位的常见方法

    C++实现数据保留小数点后两位的常见方法

    在计算机程序中,保留小数点后两位通常需要使用特定的函数或方法来实现,本文给大家介绍了C++实现数据保留小数点后两位的常见方法,并通过代码讲解的非常详细,需要的朋友可以参考下
    2025-03-03
  • 使用C语言编写一个强制关机程序

    使用C语言编写一个强制关机程序

    这篇文章主要为大家详细介绍了如何使用C语言实现一个简单的"流氓软件",一个可以强制关机恶作剧关机程序,输入指定指令才可以解除,感兴趣的小伙伴可以学习一下
    2023-11-11
  • C++中std::string::npos的用法

    C++中std::string::npos的用法

    这篇文章主要介绍了C++中std::string::npos的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 一文详解如何在VS Code上搭建C/C++开发环境

    一文详解如何在VS Code上搭建C/C++开发环境

    VSCode是由微软开发的一款免费、开源、跨平台的文本编辑器,它具有许多强大的功能,这篇文章主要给大家介绍了关于如何在VS Code上搭建C/C++开发环境的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • C++工厂方法之对象创建型模式详解

    C++工厂方法之对象创建型模式详解

    这篇文章主要为大家详细介绍了C++对象创建型模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 详解VS2019 dumpbin查看DLL的导出函数

    详解VS2019 dumpbin查看DLL的导出函数

    这篇文章主要介绍了详解VS2019 dumpbin查看DLL的导出函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08

最新评论