静态类型绑定方面的隐式声明示例是什么?

时间:2016-09-14 00:36:23

标签: c++ types

我目前正在研究类型绑定的编程主题。我知道类型绑定是变量和类型之间的关联,并且有两种类型的类型绑定。静态类型绑定(在编译期间发生的类型绑定)和动态类型绑定(在运行时发生的类型绑定)。另外,静态类型绑定是通过2个方法实现的,第一个是显式声明(用于声明变量类型的编程语句)和隐式声明。显式声明的一个例子就像

一样简单
int x; // Variable bounded to int type during compile time

然而,隐含的声明对我来说更难掌握。因此,任何人都可以发布一个使用隐式声明的代码的简单示例吗?在此先感谢大家。

2 个答案:

答案 0 :(得分:2)

我认为C ++不支持隐式声明,所以我假设你在谈论隐式转换。

隐藏转换的简单方法可能是下一个:

int x = 1;
double y = x; // 1 will be converted into 1.0 in runtime

string s = '1.2';
double z = (double)s;
double z2 = (double)'aa'; //throws an exception

如果我们谈论JavaScript,一个很好的例子可能是:

var x; //x has no type yet
x = 1; //type of x will be determinated on runtime

我希望它有用并帮助您理解。

答案 1 :(得分:0)

旧C有一定程度的隐含声明。

如果您使用的函数没有显式声明,则编译器必须按照您传递的参数的数量和类型(如果函数定义没有)声明它是参数的数量和类型。不同意,你有不确定的行为。

同样,您可以定义一个函数,而无需显式声明其返回类型(然后隐式默认为int)。

int f() { 
    g(1); //implicitly declared to take an int parameter and return an int
}

g() { return 1; } // return type implicitly declared as int

现在大部分已经过时了。例如,隐式返回类型存在于C89 / 90中,但在C99中被删除。

C ++也有一些隐含的声明,但它们却相当不同。举一个例子,如果你用C ++创建一个类,如果没有显式地声明构造函数,编译器通常会 1 隐式声明(对于几个例子)一个默认构造函数和一个复制构造函数。

struct A { 
   int b;
};

这有一个隐式声明的默认构造函数,复制构造函数,移动构造函数,复制赋值运算符和移动赋值运算符。其中大多数(除了默认的ctor之外)都采用隐式绑定类型的参数(它们是变量)。

请注意,在这种情况下,隐式声明是函数,而不是变量,因此可能会有疑问这是否符合您正在尝试讨论的内容(但至少它非常相似)。如上所述,大多数函数都采用参数,这些参数是具有隐式定义类型的变量。

  1. 有时不会发生隐式声明,例如,如果类包含非静态const成员变量或引用类型的变量。