Geo*_*rge 1 c++ templates metaprogramming c++17
假设我有如下函数:
print_sutff(const std::string stuff) {
std::cout << stuff;
}
Run Code Online (Sandbox Code Playgroud)
我可以接受:
std::string
std::string&
std::string&&
Run Code Online (Sandbox Code Playgroud)
对函数代码的外观没有任何影响.
但是,可以通过多种方式调用该函数,我希望通过它实现以下行为(或尽可能接近它):
auto pass = "a string";
print_sutff(pass);
Run Code Online (Sandbox Code Playgroud)
在这里用户不能使用&&,我更愿意&优先考虑lvaue
要么:
print_sutff("a string");
Run Code Online (Sandbox Code Playgroud)
这里应该调用&&构造函数.
所以我的问题是:
有没有办法让函数接受左值,&和&&?如果是这样,有没有办法根据被调用的上下文优先考虑使用哪一个?
如果没有,有没有办法让函数同时接受&和&&?这意味着使用哪个签名的行为是明确定义的.
这样做:
void print_stuff(std::string const& stuff) {
std::cout << stuff;
}
Run Code Online (Sandbox Code Playgroud)
甲const左值参考可以接受左值或右值.如果你没有修改输入,这是一个很好的默认值.
更好的是,因为我们是C++ 17,所以更喜欢:
void print_stuff(std::string_view );
Run Code Online (Sandbox Code Playgroud)