gpt4 book ai didi

C++ lambda 和内联 fizzbuzz

转载 作者:太空狗 更新时间:2023-10-29 20:51:47 25 4
gpt4 key购买 nike

嘿,我看过一个 C++ 演讲,其中有人制作了 lambda fizzbuzz 实现。

这不是!甚至不接近它!我的问题是,为什么我不能使用 ostream&

auto fizz = [](int& x, std::ostream& os) { x % 3 == 0 ? os << "fizz" : 0; };
auto buzz = [](int& x, std::ostream& os) { x % 5 == 0 ? os << "buzz" : 0; };


for (int i = 0; i != 100; ++i)
{
fizz(i, std::cout);
buzz(i, std::cout);
}

我的错误信息是:

        E1776   function "std::basic_ostream<_Elem, _Traits>::basic_ostream(const std::basic_ostream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 83 of "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\ostream") cannot be referenced -- it is a deleted function    56  

最佳答案

你的问题很明确。自 std::ostreamint 不是同一类型,提供与三元运算符不同的类型会产生错误。要解决这个问题,您可能希望完全避免使用 else 子句,因此您的函数将如下所示:

auto fizz = [](int& x, std::ostream& os) { if (x % 3 == 0) os << "fizz"; };
auto buzz = [](int& x, std::ostream& os) { if (x % 5 == 0) os << "buzz"; };

关于C++ lambda 和内联 fizzbuzz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548595/

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