gpt4 book ai didi

c++ - 推导函数返回类型的常量

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

有没有办法判断函数返回的是常量值还是非常量值? decltype 适用于引用,但不适用于非引用类型。

#include <type_traits>

template< typename >
struct print_type; //undefined

int main(){
auto lambda = []()->const int{ return 0; };
print_type< decltype(lambda()) > dt; //print_type< int >
print_type< typename std::result_of<decltype(lambda)()>::type > ro;
//print_type< int >


return 0;
}

我实现了一个 std::tuple 转换函数,它将在每个元组元素上调用一个函数对象,并将结果存储在一个由返回类型组成的新 tuple 中。这不适用于 const 返回类型,这非常令人惊讶(但需要)。

最佳答案

对于非内置类型,您可以使用std::is_constdecltype 来获得您想要的。

例子:

#include <iostream>
#include <type_traits>

struct A {};

int main()
{
std::cout << std::boolalpha;
{
auto lambda = []()->A{ return A(); };
std::cout << std::is_const<decltype(lambda())>::value << std::endl;
}

{
auto lambda = []()->const A{ return A(); };
std::cout << std::is_const<decltype(lambda())>::value << std::endl;
}

return 0;
}

输出:

falsetrue

关于c++ - 推导函数返回类型的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897695/

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