加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C 11中列表初始化的优点

发布时间:2020-12-16 09:59:04 所属栏目:百科 来源:网络整理
导读:到目前为止,我发现了以下使用 list initialization(a.k.a.统一初始化). 1)在介绍之前是列表初始化功能 int a=3.3f; // ouch fractional part is automatically truncated 但是在C 11中 int a{3.3f}; // compiler error no implicit narrowing conversion all
到目前为止,我发现了以下使用 list initialization(a.k.a.统一初始化).

1)在介绍之前是列表初始化功能

int a=3.3f;   // ouch fractional part is automatically truncated

但是在C 11中

int a{3.3f};  // compiler error no implicit narrowing conversion allowed

2)动态数组元素可以静态初始化.
???例如,参见该程序在C 03中无效,但自C 11起有效:

#include <iostream>
int main()
{
    int* p=new int[3]{3,4,5};
    for(int i=0;i<3;i++)
        std::cout<<p[i]<<' ';
    delete[] p;
}

3)它解决了most vexing parse问题

如果你告诉我列表初始化的其他优点会更好.除了3以上,列表初始化还有什么优点吗?

非常感谢您的回答.

解决方法

您没有提到的一个显着优点是它在模板元编程中的用处,您现在可以使用模板计算某些内容,然后在constexpr函数中展开一些模板数据结构并将结果存储在数组中.

例如,见:Populate An Array Using Constexpr at Compile-time

在代码中:

template<unsigned... Is>
constexpr Table MagicFunction(seq<Is...>){
  return {{ whichCategory(Is)... }};
}

我认为在C 11之前没有办法做任何事情.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读