什么叫int()?

乔纳森·米

一遍又一遍地说明,原始类型没有构造函数。例如_bar,当我调用时,它没有初始化为0 Foo()

class Foo{
    int _bar;
};

因此显然int()不是构造函数。但是,什么它的名字?

在此示例中,我想说的i是:(构造?已初始化?被愚弄?)

for(int i{}; i < 13; ++i)

Loki Astari在这里提到该技术有某种名称。

编辑以回应Mike Seymour

#include <iostream>

using namespace std;

class Foo{
    int _bar;
public:
    void printBar(){ cout << _bar << endl; }
};

int main()
{
    Foo foo;

    foo.printBar();

    Foo().printBar();

    return 0;
}

在Visual Studio 2013上运行此代码会产生:

3382592
3382592

有趣的是,在gcc 4.8.1上得出:

134514651
0

迈克·西摩

一遍又一遍地说明,原始类型没有构造函数。

这是正确的。

例如,当我打电话时,此栏未初始化为0 Foo()

是的。Foo()指定值初始化,对于没有用户提供的构造函数的此类类,它意味着在初始化其成员之前将其初始化为零。因此_bar最终的值为零。(尽管如注释中所述,一个流行的编译器没有正确对此类进行值初始化。)

如果要使用默认初始化,则不会被初始化。您不能临时做到这一点;但是声明的变量Foo f;或对象new F将被默认初始化。基本类型的默认初始化不执行任何操作,使它们具有不确定的值。

如果该类具有用户提供的默认构造函数,并且该构造函数没有专门初始化,则也不会初始化它_bar同样,它将被默认初始化,没有任何效果。

因此显然int()不是构造函数。但是它叫什么名字呢?

作为表达式,它是type的值初始化的临时值int

从句法上讲,这是“显式类型转换(函数表示法)”的特例;但是使用该术语进行类型转换以外的其他操作会造成混乱。

在此示例中,我想说的i是:(构造?已初始化?被愚弄?)

已初始化。如果要更具体,请进行列表初始化(带有空列表),值初始化或零初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么叫“-”?

来自分类Dev

为什么叫iota?

来自分类Dev

为什么叫ROM?

来自分类Dev

什么叫paintComponent()?

来自分类Dev

Java主类。什么叫?

来自分类Dev

什么叫最优化算法?

来自分类Dev

什么时候叫代表?

来自分类Dev

为什么叫响应文件

来自分类Dev

什么是__方法__,为什么叫__getattr__?

来自分类Dev

viewdidAppear:为什么我必须叫超级?

来自分类Dev

Android:为什么这样叫“无效”区域?

来自分类Dev

这是什么补偿。科学 概率。叫?

来自分类Dev

为什么Destructor叫Three Time?

来自分类Dev

什么叫匿名内部类内部的方法?

来自分类Dev

什么叫HelloWorldAnonymousClasses中的greet()方法?

来自分类Dev

为什么叫d'tor,尽管不叫?

来自分类Dev

为什么叫 Hirsute 而不是 Hairy?

来自分类Dev

为什么DrRacket似乎将其识别为尾叫?

来自分类Dev

错误R6010。为什么叫它?

来自分类Dev

为什么我可以叫.between?Fixnum方法?

来自分类Dev

我叫它时下面方法的参数是什么

来自分类Dev

错误R6010。为什么叫它?

来自分类Dev

为什么asp.net MVC叫轻量级?

来自分类Dev

什么叫 URL 到文件夹,而不是特定文件?

来自分类Dev

为什么我不能叫self.save!创建回调后在Ruby DataMapper中?

来自分类Dev

Rails嵌套模型更新不使用子控制器。什么叫?

来自分类Dev

可以优化尾叫吗?如果是这样,没有发生的特殊原因是什么?

来自分类Dev

可以优化尾叫吗?如果是这样,没有发生的特殊原因是什么?

来自分类Dev

最好的地方叫凉亭