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

C++ 静态类型绑定方面的隐式声明示例是什么?,c++,types,C++,Types,我目前正在研究类型绑定的编程主题。我知道类型绑定是变量和类型之间的关联,有两种类型的类型绑定。静态类型绑定(编译时发生的类型绑定)和动态类型绑定(运行时发生的类型绑定)。此外,静态类型绑定由两种方法实现,第一种是显式声明(用于声明变量类型的编程语句)和隐式声明。显式声明的示例如下 int x; // Variable bounded to int type during compile time 然而,隐式声明对我来说更难理解。因此,任何人都可以发布一个使用隐式声明的简单代码示例吗?谢谢大家。

我目前正在研究类型绑定的编程主题。我知道类型绑定是变量和类型之间的关联,有两种类型的类型绑定。静态类型绑定(编译时发生的类型绑定)和动态类型绑定(运行时发生的类型绑定)。此外,静态类型绑定由两种方法实现,第一种是显式声明(用于声明变量类型的编程语句)和隐式声明。显式声明的示例如下

int x; // Variable bounded to int type during compile time

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

我认为C++不支持隐式声明,所以我假设你在谈论隐式转换。< /P> 下一步可能是演示隐式转换的简单方法:

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

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

旧的C有某种程度的隐式声明

如果使用的函数没有显式声明,则编译器需要根据传递的参数的数量和类型将其声明为参数的数量和类型(如果函数定义不一致,则会出现未定义的行为)

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

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

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

struct A { 
   int b;
};
这有一个隐式声明的默认构造函数、复制构造函数、移动构造函数、复制赋值运算符和移动赋值运算符。其中大多数(除默认构造函数外)都使用隐式绑定类型的参数(变量)

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


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

  • 什么是“隐含声明”?这不是C++中的一个问题。你确定这些术语是与C++有关的吗?我的错误是每个人。我只是发现一些编程语言不实现静态类型绑定,而有些编程语言不支持动态类型绑定。如果你是指什么?(类型由编译器推断)该页面上有一个解释和示例。感谢您分享这个Facundo,但我对您的javaScript示例有一个问题。var x;x=1;语句是否被视为隐式声明?或者这是类型推断的示例?什么样的平台在将double转换为int时抛出异常?Jaja,您知道吗是的,我没有使用一个好的例子,因为数字可以被转换,在这个例子中它会被截断!你的答案没有提到声明器中的类型绑定(变量的类型绑定)。你说的是“隐式的东西”在C/C++中@Peregring lk:那根本不是真的。你不相信参数是变量,还是完全忽略了这一部分?就这点而言,纯函数语言(根本没有变量)仍然有绑定。尽管他给出的示例是一个类型的变量名,但一个类型的函数名也是一个绑定。你说得对。函数头也是一个声明符,函数名是绑定到一个函数类型。你可以说
    auto
    说明符,它也是一个隐式绑定,因为你不要说变量的类型。@Peregring lk:在其中一条注释中,OP将隐式绑定(他关心)与类型推断(他显然不关心)区分开来。
    auto
    是类型推断的一个明确例子(函数模板的参数类型也是如此)。
    struct A { 
       int b;
    };