C++仍然被认为是一种静态类型语言吗?

5

我曾经了解过C++是一种静态类型语言,但新的C++规范引入了一种新的语法auto,它可以自行确定变量类型。那么C++还能被认为是一种静态类型语言吗?

3个回答

22

不,这并不会使C++成为动态类型语言。auto只是一种编译时的类型推断方法。生成的代码与不使用auto完全相同,并且类型无法在运行时更改。


1
评论不适合进行长时间的讨论;此对话已被移至聊天室 - George Stocker
@GeorgeStocker 谢谢。我之前尝试过,但是一直收到一些错误信息。 - R. Martinho Fernandes

3

C++仍然是一种静态类型语言,具有auto类型说明符,因为auto表示类型将在编译时由编译器推断,而不是在动态类型语言中在运行时推断。


3
所以,C++仍然可以被认为是一种静态类型语言吗?
是的,因为这段代码片段仍无法编译:
auto i = 42;   // 42 is an int -> i is an int
i = "test";    // can't assign a string to an int

这段代码在任何语言中都无法编译...可以解释运行,但无法编译。但是,C++具有动态的能力。您甚至可以创建一个动态类,使用动态对象的初始化列表并获得动态结果。如果感兴趣,我有概念证明。 - zackery.fix
2
@zackery.fix 这与解释型和编译型无关。它们只是实现策略,不会从根本上影响语言的语义。 - Sebastian Redl
@zackery.fix 在这里,一个 C++ 解释器:https://root.cern.ch/cling。在这里,一个 Lisp 编译器:http://www.clisp.org/。这与动态类型完全正交。 - R. Martinho Fernandes
但是C++通过元编程可以改变语言的语义。 - zackery.fix
这不是我要表达的重点。我理解动态和静态之间的差异,并且知道那些项目,但我正在尝试减少代码复杂性并最小化技术占用。 - zackery.fix
自从C++17以来,使用std::variant可以模拟动态类型。 - Anderson Green

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接