c – 为什么`return {};`不适用于`std :: forward_list`?

前端之家收集整理的这篇文章主要介绍了c – 为什么`return {};`不适用于`std :: forward_list`?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的编译器是clang 3.4,它完全支持C 14和std :: forward_list.
#include <forward_list>

struct A
{
    A()
    {}

    explicit A(initializer_list<int>)
    {}
};

A f1()
{
    return A(); // OK
}

A f2()
{
    return {}; // OK
}

typedef std::forward_list<int> T;

T f3()
{
    return T(); // OK
}

T f4()
{
    // error : converting to 'T {aka std::forward_list<int>}' from initializer 
    // list would use explicit constructor 'std::forward_list'     
    return {}; // ???
}

为什么要回归{};不适用于std :: forward_list?

解决方法

好吧,即使您的编译器符合C14标准,您的标准库也不是:)

C 11有:

explicit forward_list( const Allocator& alloc = Allocator() );

而C 14有(自library DR2193起):

forward_list() : forward_list( Allocator() ) {}
explicit forward_list( const Allocator& alloc );

如果将A的默认构造函数更改为显式A(char * = nullptr),您将看到相同的行为.

原文链接:https://www.f2er.com/c/116239.html

猜你在找的C&C++相关文章