假设我有以下功能:
print_sutff(const std::string stuff) {
std::cout << stuff;
}
我可以接受:
std::string
std::string&
std::string&&
对功能代码的外观没有任何影响。
然而,可以通过多种方式调用该函数,我希望通过该方式实现以下行为(或尽可能接近它):
auto pass = "a string";
print_sutff(pass);
这里用户不能使用&amp;&amp;,我更愿意和&amp;优先考虑lvaue
或:
print_sutff("a string");
这里&amp;&amp;应该调用构造函数。
所以我的问题是:
有没有办法让函数接受左值,&amp;和&amp;&amp; ?如果是这样,有没有办法根据被调用的上下文优先考虑使用哪一个?
如果没有,是否有任何方法可以使功能同时接受&amp;和&amp;&amp; ?这意味着使用哪个签名的行为是明确定义的。
答案 0 :(得分:8)
这样做:
void print_stuff(std::string const& stuff) {
std::cout << stuff;
}
const
左值参考可以接受左值或左值。如果您没有修改输入,那么这是一个很好的默认值。
Even better,因为我们是C ++ 17,所以更喜欢:
void print_stuff(std::string_view );