gpt4 book ai didi

c++ - 此类声明 int(a) 的 GCC 文档

转载 作者:行者123 更新时间:2023-11-30 01:44:07 26 4
gpt4 key购买 nike

我的程序的想法是创建一个局部变量,然后调用构造函数。当变量超出范围时,将调用析构函数。所有的工作都是在 Ctor 和 Dtor 中完成的。基本上我想创建一个我并不真正关心的局部变量并让它自动销毁。

然后我会做这样的事情:

typedef Foo DoInCtor

之后我会做这样的事情:

DoInCtor()

这会创建我实际上并不关心的本地变量。

这与我正在做的事情类似:

#include <stdio.h>
#include <typeinfo>
#include <iostream>

class Bar
{
public :
Bar() {printf("BAR, Default Ctor %p\n", this);}

~Bar() {printf("BAR, Default Dtor %p\n", this);}
};

class Foo
{
public :
Bar m_bar;
Foo() : m_bar(Bar()) {printf("FOO, Default Ctor %p\n", this);}
Foo(Bar ref_bar) : m_bar(ref_bar) {printf("FOO, Other Ctor %p", this);}
~Foo() {printf("FOO, Default Dtor %p\n", this);}
};

Foo foo;

int main()
{
Bar bar1;
printf("bar1 address, outside local scope : %p\n", &bar1);
std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
// This is some lcoal scope
{
Foo(bar1);
printf("bar1 address, in local scope : %p\n", &bar1);
std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
}
Foo foo1= Foo(bar1);
printf("foo1 address, in local scope : %p\n", &foo1);
return 0;
}

这会在我的机器上输出以下内容,在 Ubuntu 14.04 上使用 g++ 4.8.4 编译:

BAR, Default Ctor 0x6021f1
FOO, Default Ctor 0x6021f1
BAR, Default Ctor 0x7ffe6808cfcd
bar1 address, outside local scope : 0x7ffe6808cfcd
Type of bar1 : 3Bar
BAR, Default Ctor 0x7ffe6808cfcf
FOO, Default Ctor 0x7ffe6808cfcf
bar1 address, in local scope : 0x7ffe6808cfcf
Type of bar1 : 3Foo
FOO, Default Dtor 0x7ffe6808cfcf
BAR, Default Dtor 0x7ffe6808cfcf
FOO, Other Ctor 0x7ffe6808cfceBAR, Default Dtor 0x7ffe6808cfcf
foo1 address, in local scope : 0x7ffe6808cfce
FOO, Default Dtor 0x7ffe6808cfce
BAR, Default Dtor 0x7ffe6808cfce
BAR, Default Dtor 0x7ffe6808cfcd
FOO, Default Dtor 0x6021f1
BAR, Default Dtor 0x6021f1

令我困扰的是,在主函数作用域中 bar1 是一个 Bar 类型,但在局部作用域中它是 Foo 类型。在我看来,这是某种类型的 var 声明。我什至尝试在 gcc 上关注:

int(a)

并且它创建了一个 a 变量,它是 int 类型。

这里的问题是,是否有人可以向我提供某种文档,其中详细解释了这一点。一些 GCC 或其他一些文档。

最佳答案

您只需创建一个名为 bar1 的局部变量,它会覆盖 main 中的变量并具有类型 Foo。您不使用第二个构造函数创建临时 Foo 变量。在这种情况下,括号中的名称是允许的。

可疑行与 Foo bar1;

相同

关于c++ - 此类声明 int(a) 的 GCC 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com