【问题标题】:How can I write variable definition without declaration?如何在没有声明的情况下编写变量定义?
【发布时间】:2021-11-30 06:05:02
【问题描述】:

我可以写声明或带定义的声明。例子:

int x = 1; // declaration and definition
extern int x; // only declaration
bool f(); // only declaration
bool g() {} // declaration and definition
class X; // declaration
class X {}; // declaration and definition

所以我们可以看到,这可以只写声明和带定义的声明。 但是我怎么能只写定义呢?我听说这是可能的。

【问题讨论】:

  • 对于班外的班级成员? (不确定它们的定义是否算作声明)。
  • 为什么?出于好奇还是有什么问题需要解决?
  • bool g() {}; 应该是 bool g() {} 您的版本是有效的 C++,但 ;;;;; 也是如此——分号与函数定义完全无关。
  • 技术上每个定义也是一个声明。非正式地,有些人有时可能会说“这是一个定义,而不是一个声明”,但这只会让人感到困惑。

标签: c++ c++11 c++17


【解决方案1】:

没有声明就没有定义,因为第一个术语的含义包括第二个。此外,我还提供了 C++ 草案中的一些信息(6.2. 声明和定义):

一个声明被说成是它所声明的每个实体的定义 定义。

链接:https://eel.is/c++draft/basic.def

【讨论】:

  • 包含多个名称的定义需要特定的措辞,例如struct Foo { } myFoo, anotherFoo;。通常每个名称使用一个定义会更好。
【解决方案2】:

你不能为未声明的东西写定义,直截了当。但是你确实有 C++ 构造来编写可能不作为第一个声明的定义。他们在这里:

struct C {
    static int i;
};

int C::i = 1;

namespace N {
    extern int i;
}

int N::i = 2;

int C::i = 1; 和 int N::i = 2; 都不能作为 i 的初始声明。除非每个 i 的先前声明存在,否则这些定义无效。所以在某种程度上,它们是非声明性的定义。

这个答案可能有争议,并且可能不属于您想到的答案,但这些只是示例。

【讨论】:

    【解决方案3】:

    变量声明的意思是,指定变量的类型和名称。 示例:int A 表示变量类型(内存中的内存位置)为int,名称为A。 但是在变量定义中,是为变量分配内存,并赋值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2022-08-21
      相关资源
      最近更新 更多