以下のコードを参照してください (s は、string ではなく char を持つ配列であることに注意してください)。
#include <string>
#include <iostream>
#include <utility>
void func(std::string & s, char a) {
std::cout << "here1" << std::endl;
// ...
}
void func(std::string && s, char a) {
std::cout << "here2" << std::endl;
// ...
}
template <class T>
void foo(T && s) {
std::cout << "foo2" << std::endl;
func(s, ':');
//func(std::forward<T>(s), ':');
}
int main(int agrc, char *argv[])
{
//std::string s("a:b:c:d");
char s[8] = "abcdefg";
foo(std::move(s));
std::string s2("abcd")
foo(s2);
return 0;
}
func(s, ':')
usingを置き換えても違いはありません。この場合std::forward
、foo 関数はなしで完全な転送を行います。std::forward
std::forward
C++11での「prefect forwarding」の誤解はありますか?