gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:32 25 4
gpt4 key购买 nike

我的编译器是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 {}; // ???
}

为什么 return {}; 不适用于 std::forward_list

最佳答案

嗯,即使你的编译器是 C++14 兼容的,你的标准库不是:)

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 的默认构造函数更改为 explicit A(char* = nullptr),您将看到相同的行为。

关于c++ - 为什么 `return {};` 不适用于 `std::forward_list` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24510067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com