当前位置:  开发笔记 > 编程语言 > 正文

隐含的默认构造意义?

如何解决《隐含的默认构造意义?》经验,为你挑选了2个好方法。

在这个参考页面上std::tuple,据说该类型的默认构造函数是"显式的,当且仅当Ti对于至少一个不是隐式可默认构造的i".

我对"隐式默认构造"意味着什么感到困惑.有人能举个例子吗?



1> Kerrek SB..:

这是一个例子:

struct A {};
struct B { explicit B() = default; };

int main()
{
    A a1 = {};
    A a2 {};

    // B b1 = {}; // Error, would use explicit default constructor
    B b2 {};
}

explicit由于列表初始化,构造函数与C++ 11相比变得更加相关.



2> YSC..:

这意味着,std::tuple要隐式构造默认构造,所有Ti 类型都必须.

隐式默认构造元组的示例

例如,因为std::string并且std::vector 隐式可默认构造(它们的默认构造函数不是explicit),std::tuple所以:

void f(std::tuple>);

f({}); // valid and equivalent to:
std::string sempty;
std::vector vempty;
auto tsv = std::make_tuple(sempty, vempty);
f(tsv);

非隐式可构造元组的示例

使用非隐式默认构造类型A,std::tuple不能隐式构造默认构造:

struct A
{
    explicit A() = default;
};

void f(std::tuple);

f({}); // error

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有