gpt4 book ai didi

c++ - 如何根据参数从函数左值或右值返回?

转载 作者:行者123 更新时间:2023-12-04 07:24:57 25 4
gpt4 key购买 nike

考虑示例:

#include <string>
#include <iostream>

auto get_r_value() { return std::string("hello"); }

int VAL = 15;
int& get_l_value() { return VAL;}

template<typename ...Types> auto&& func(Types... vars) {
if constexpr (sizeof ... (vars) <= 2) {
return get_l_value();
} else {
return get_r_value(); // warning: returning reference to temporary
}
}

int main() {

auto&& a = get_l_value();
a = 20;
std::cout << VAL << std::endl; // print 20

auto&& b = get_r_value(); // auto&& works as expected!
std::cout << b << std::endl;

func(1, 2) = 30;
std::cout << VAL << std::endl; // print 30

std::cout << func(1, 2, 3) << std::endl; // SEGMENTATION FAULT!

return 0;
}
我们可以看到 auto&&当它是返回类型时类型不起作用!
有没有办法根据模板参数从函数左值或右值返回?

最佳答案

您可能会使用 decltype(auto) :

template<typename ...Types> decltype(auto) func(Types... vars) {
if constexpr (sizeof ... (vars) <= 2) {
return get_l_value();
} else {
return get_r_value();
}
}
Demo

关于c++ - 如何根据参数从函数左值或右值返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68268969/

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