阅读 问题 后,我知道声明和定义之间的区别。那么这是否意味着定义等于声明加初始化?
原文由 Tony 发布,翻译遵循 CC BY-SA 4.0 许可协议
阅读 问题 后,我知道声明和定义之间的区别。那么这是否意味着定义等于声明加初始化?
原文由 Tony 发布,翻译遵循 CC BY-SA 4.0 许可协议
宣言说“这东西存在于某处”:
int foo(); // function
extern int bar; // variable
struct T
{
static int baz; // static member variable
};
定义说“这个东西在这里存在;为它做记忆”:
int foo() {} // function
int bar; // variable
int T::baz; // static member variable
在对象的定义点初始化是可选的,并说“这是这个东西的初始值”:
int bar = 0; // variable
int T::baz = 42; // static member variable
有时可以在声明时改为:
struct T
{
static int baz = 42;
};
…但这涉及到更复杂的功能。
原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答806 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
1 回答2.2k 阅读
1 回答808 阅读✓ 已解决
2 回答1.1k 阅读
1 回答1.2k 阅读
1.2k 阅读
宣言
声明,通常是指在程序中引入一个新名称。例如,您可以通过描述它的“签名”来 声明 一个新函数:
或声明一个不完整的类型:
最后但同样重要的是,声明一个对象:
在 C++ 标准中,第 3.1⁄1 节将其描述为:
定义
定义是对先前声明的名称的定义(或者它既可以是定义又可以是声明)。例如:
具体而言,C++ 标准在 §3.1⁄1 中将其定义为:
初始化
初始化是指在构造时对值的“赋值”。对于
T
类型的通用对象,它通常采用以下形式:但在 C++ 中它可以是:
甚至:
使用 C++11。
结论
这取决于。关于你在说什么。如果您正在谈论一个对象,例如:
这是一个没有初始化的定义。相反,以下是带有初始化的定义:
在某些情况下,谈论“初始化”、“定义”和“声明”是没有意义的。例如,如果您在谈论一个函数,那么 初始化 并没有多大意义。
所以,答案是 否定 的:定义并不意味着声明加初始化。