小编Typ*_*ion的帖子

ISO C++ 说这些是模棱两可的,即使第一个最差的转换比第二个最差的转换好

为什么这是模棱两可的?

// In class declaration
template<typename T>
class threadsafe_list {
    void for_each(std::function<void(T&)> _consumer);
    void for_each(std::function<void(const T&)> _consumer) const;
}
Run Code Online (Sandbox Code Playgroud)
// Calling for_each
threadsafe_list<bool> list;

std::function<void(const bool&)> print = [](const bool& _bool) {
    std::cout << (_bool ? "True" : "False") << std::endl;
};

// Warning: for_each is ambiguous
list.for_each(print);

// This is OK
list.for_each([](const bool& _bool) { std::cout << (_bool ? "True" : "False") << std::endl; }); 
Run Code Online (Sandbox Code Playgroud)

为什么上面的说法有歧义?for_each 之一用于 const 而另一个则不是。谢谢!

c++ language-lawyer

3
推荐指数
1
解决办法
245
查看次数

标签 统计

c++ ×1

language-lawyer ×1