C语言 显式 隐式是啥意思

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 显式 隐式是啥意思相关的知识,希望对你有一定的参考价值。

隐式转换就是不带转换类型的转换,如int转float你可以这样子float
a
;int
b
=
4;
a=b就是隐式转换,而a
=
(float)b就是显示转换。区别在于当向下转换时如果不显示转换就会有问题,如float
a
=
4.5;
int
b
=
a;这里就可能报错,因为int可以自动上升为float,但由float不能自动转化为int,这里就需要显式转换,即int
b
=
(float)a才是最保险的;所以显式转换肯定不会出错,但隐式转换就说不定了。
参考技术A 显示是你要怎么做,根据软件开发人员的要求去做。
隐式,是C语言默认的一些规则。比如,隐式类型转换
如果一个char类型的数据和一个int类型的数据相加,char会被隐式转换为int。
这个过程就是编译器帮你处理的,按照默认的隐式转换规则本回答被提问者采纳

什么是隐式方法调用和显式方法调用?

【中文标题】什么是隐式方法调用和显式方法调用?【英文标题】:What's implicit method call and explicit method call? 【发布时间】:2012-08-04 00:50:16 【问题描述】:

我在我的 Python 教科书中读到了这些术语。我无法通过查找它们的字面意思来弄清楚它们的含义。有人可以向我解释一下或提供一些参考吗?

--更新术语的上下文

i) (­42).__abs__() # Need parentheses to avoid confusing ... # ... method call '.' with decimal point
j) (42).__mul__(2) # Even multiplication is a method call
k) name.swapcase()
l) name.title().swapcase() # name.title() is an object so ... m) name.upper().find('TOM') # ... we can “cascade” method calls.

希望您现在意识到您所做的大部分操作 本课程的到目前为止实际上是通过隐式调用提供的 您一直在使用的对象(数据项)的方法。 实际上,所有运算符('+'、'*' 等)只是 方法调用,但只有部分内置函数对应 方法。

【问题讨论】:

【参考方案1】:

根据我的理解,Python 会隐式调用某些方法,因为某些运算符(如 '+'、'-'、'*'、'.'、'//'、()、del 等)或表达式中使用的内置函数(如 repr、str、divmod、pow 等)。因此调用的方法是术语“魔术方法”或“dunder”,因为它们中的大多数都以__ 前缀和后缀命名。

更多详情请见https://docs.python.org/3.8/reference/datamodel.html。

这些方法也可以显式调用。例如,在您的问题中:

abs(42)

可以called为:

(42).__abs__()

42.0.__abs__()

【讨论】:

【参考方案2】:

Java 允许隐式和显式函数调用。

例子:

public class Junk

  private int a = 1;
  public String toString ()  return (a); 


void main (String [] args)

  Junk j = new Junk (); // implicit call to Junk's default constructor 
  System.out.println (j); // implicit call to j.toString();
  System.out.println (j.toString()); // explicit call to j.toString();

【讨论】:

【参考方案3】:

隐式调用是由编译器自动进行的函数调用,无需用户干预,而显式调用是用户使用特定类型的代码进行的。

【讨论】:

【参考方案4】:

好吧,我不知道您书中这些术语的上下文,但我找到了implicit-vs-explicit-programming。它首先谈到了explicit programmingimplicit programming,然后是implicit method callexplicit member call。不确定它是否有帮助。也许你可以给我们更多的细节。

编辑

我想这意味着当您使用3+23*2 时,您似乎没有显式调用任何方法,但实际上您调用了因为它们的实现方式是调用(3).__add__(2) 或@ 987654329@。所以你隐式调用了这些方法。

【讨论】:

感谢您提供链接,我仍在等待一些代码示例顺便说一句,我已在教科书中更新了该术语的上下文【参考方案5】:

隐式方法调用是指特定方法将被自己调用(如java中的JVM),显式方法调用是指该方法将由用户调用。

【讨论】:

我认为为对象分配内存时的默认构造函数调用可以认为是隐式方法调用(甚至构造函数也是一种特殊方法)。而调用用户定义的方法可以认为是显式的方法调用 我可以再举一个例子,当我们在 java 中使用 System.out.println() 并尝试打印一个整数时,System.out.println() 会自动调用 toString() 来转换特定的整数值到字符串,然后打印它

以上是关于C语言 显式 隐式是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

C语言枚举类型是啥意思?

C语言数据类型转换规则(隐式转换+显式转换)

求助 default 在c语言中是啥意思?

变量是啥意思

C语言里还有这个符号吗?是啥意思?←→ 这个是啥意思?

C语言里%zd是啥意思?