我目前正在研究类型绑定的编程主题。我知道类型绑定是变量和类型之间的关联,并且有两种类型的类型绑定。静态类型绑定(在编译期间发生的类型绑定)和动态类型绑定(在运行时发生的类型绑定)。另外,静态类型绑定是通过2个方法实现的,第一个是显式声明(用于声明变量类型的编程语句)和隐式声明。显式声明的一个例子就像
一样简单int x; // Variable bounded to int type during compile time
然而,隐含的声明对我来说更难掌握。因此,任何人都可以发布一个使用隐式声明的代码的简单示例吗?在此先感谢大家。
答案 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之外)都采用隐式绑定类型的参数(它们是变量)。
请注意,在这种情况下,隐式声明是函数,而不是变量,因此可能会有疑问这是否符合您正在尝试讨论的内容(但至少它非常相似)。如上所述,大多数函数都采用参数,这些参数是具有隐式定义类型的变量。