【发布时间】:2021-09-09 14:51:39
【问题描述】:
我有以下功能:
void func(void * const &ptr)
{
std::cerr << "const" << std::endl;
}
void func(void * &&ptr)
{
std::cerr << "mutable" << std::endl;
}
void* const func2()
{
return nullptr;
}
一个重载采用 const 引用参数,另一个采用可变右值引用。还有一个返回 const 值的函数。
当我将该 const 临时值传递给函数时:
func(func2());
我希望选择 const 重载。但相反,我得到:
mutable
这怎么可能?为什么 const 返回值绑定到非 const 右值引用参数?
但是,当我将 const struct 传递给函数而不是 void* 时,不会发生这种情况:
struct A
{
};
void func(A const &a)
{
std::cerr << "const" << std::endl;
}
void func(A &&a)
{
std::cerr << "mutable" << std::endl;
}
A const func3()
{
return A();
}
int main()
{
func(func3());
return 0;
}
结果是:
const
您可以在coliru 上查看。
const void* 和 const struct 有什么区别?
有没有办法使重载专门采用 const 值?
【问题讨论】:
标签: c++ rvalue overload-resolution