C++ 函数的非类型模板参数是按引用还是按默认值?

C++ 函数的非类型模板参数是按引用还是按默认值?,c++,c++17,C++,C++17,我应该通过引用还是通过“值”(隐式指针)获取nttp函数 模板 结构c { static constexpr auto functor=fn; }; vs 模板 结构c { static constexpr auto functor=fn; static constexpr auto&&functor=fn;//可能吗? }; 还是没关系?如果它依赖于编译器,那么问题是关于MSVC的 用法: c< GetLastError >::functor( ); c::functor()

我应该通过引用还是通过“值”(隐式指针)获取nttp函数

模板
结构c
{
static constexpr auto functor=fn;
};
vs

模板
结构c
{
static constexpr auto functor=fn;
static constexpr auto&&functor=fn;//可能吗?
};
还是没关系?如果它依赖于编译器,那么问题是关于MSVC的

用法:

c< GetLastError >::functor( );
c::functor();

您正在将函数作为非类型模板参数传递给模板。它总是引用同一个函数,因为它实际上是函数的地址。在这种情况下,
auto
可以


通常人们根据需要使用
auto
,但您可以使用指针或引用来引用全局数据(例如,具有文件级作用域的变量)。

关于通过直接地址传递函数,即
c<&GetLastError>
的关注点是什么?这是一个需要考虑的因素,还是因为它们的函数会退化到它们的地址?这并不重要。这会影响函数的内联能力吗?
c< GetLastError >::functor( );