来自 c++ 的奇怪代码段

发布于 2024-12-27 07:43:58 字数 213 浏览 2 评论 0原文

阅读其他帖子中的代码,我看到类似的内容。

struct Foo {
  Foo() : mem(0) {}
  int mem;
};

在这种情况下,mem(0) {} 会做什么,特别是对于大括号?我以前从未见过这个,也不知道我还能在哪里找到这个。我知道 mem(0) 会将 mem 初始化为 0,但为什么要使用 {}?

谢谢。

Reading code from other posts, I'm seeing something like this.

struct Foo {
  Foo() : mem(0) {}
  int mem;
};

What does mem(0) {} does in this case, especially regarding the curly brackets? I have never seen this before and have no idea where else I would find out about this. I know that mem(0), would intialize mem to 0, but why the {}?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼睛会笑 2025-01-03 07:43:58

由于 Foo() 是类的构造函数,因此它必须有一个主体,即使成员变量 mem 是在其外部初始化的。

这就是为什么在您的示例中,构造函数的主体为空:

Foo() : mem(0)
{
    // 'mem' is already initialized, but a body is still required.
}

Since Foo() is the class' constructor, it must have a body, even if the member variable mem is initialized outside of it.

That's why, in your example, the constructor has an empty body:

Foo() : mem(0)
{
    // 'mem' is already initialized, but a body is still required.
}
野心澎湃 2025-01-03 07:43:58

它定义了类的构造函数。冒号后面的部分是初始化列表,其中使用构造函数调用将 mem 成员初始化为零。

比较:

int a(0);
int b = 0;

这两者的作用相同,但前者更符合 C++ 中对象构造的典型外观。

It defines the constructor of the class. The part after the colon is the initialization list, in which the mem member is initialized to zero using a constructor call.

Compare:

int a(0);
int b = 0;

These two do the same, but the former is more in line with how object construction typically looks in C++.

别再吹冷风 2025-01-03 07:43:58

int c++ 你可以在.h文件中定义你的方法实现

class MyClass
{
  public:
   MyClass(){
     .....
   }

   void doSomething(){
     .....
   }

   ~MyClass(){
     .....
   }
};

通常它在模板实现中使用。另外,如果您想避免库链接,并且您更愿意向用户提供所有代码,以便他可以包含您的文件,而无需将任何 lib 文件链接到他的项目,您也可以使用这种类声明方法。

int c++ you can define your method implementation in .h file

class MyClass
{
  public:
   MyClass(){
     .....
   }

   void doSomething(){
     .....
   }

   ~MyClass(){
     .....
   }
};

Usually it used in templates implementation. Also you could use this method of class declaration in case you would like to avoid libraries linking and you prefer to give to user all your code so he can include your file without linking any lib file to his project.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文