【问题标题】:C++ std::map Intristic Type Initialization Using [] Operator使用 [] 运算符的 C++ std::map 内部类型初始化
【发布时间】:2011-08-04 23:56:02
【问题描述】:

什么标题,假设我有这样的地图:

std::map<int, int> m;

如果我写以下内容

cout<<m[4];
  • 结果是什么(0,未初始化,特定于编译器)?
  • 是否同样适用于指针(即 std::map)?

编辑:
澄清一下,在这个问题中,我正在寻求标准行为。

提前致谢, 水泥

【问题讨论】:

    标签: c++ stl stdmap


    【解决方案1】:

    该值将是该类型的默认构造函数创建的值,因为使用T() 填充新点。对于int,这是0。你可以自己看看:

    #include <iostream>
    
    using namespace std;
    
    int main() {
        cout << int() << endl; // prints 0
    }
    

    像这样用空括号初始化类型称为值初始化(请参阅下面的 ildjarn 评论)。

    【讨论】:

    • 学究式地,这称为值初始化
    • @ildjarn 到底是哪一部分?
    • @Cem 默认值仍然是0
    • @Seth :用一组空括号初始化一个类型。该概念在第 8.5 节中定义;请参阅this answer 了解标准。
    • @Cem 好吧,其他答案几乎说明了一切。 对 T 类型的对象进行值初始化意味着:...(类类型)...否则,该对象被零初始化。此外,实现不使用T_ x;,它们插入T_(),这是对新对象进行值初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多