我有这个代码:
char X[64];
template <typename E>
void f (E &&e, size_t len)
{
memset(X, 0, 64);
memcpy(X, &e, len);
}
用这个调用:
const char* tx = "hello!";
f(tx, strlen(tx));
但是当我打印变量 X 不是我想要的! 我认为我对 e(声明为 E&& e)的普遍引用是错误的。
有什么想法吗?
最佳答案
你的通用引用[*] 在类型推导后变成了对 const char*
的左值引用(E
被推导为 const char*&
)。
因此,代替这个:
memcpy(X, &e, len);
// ^^
// This is a pointer to a pointer to const char!
// ^^^^^^^^^^^^
你应该使用这个:
memcpy(X, e, len);
[*] 术语“通用引用”是由 Scott Meyers 引入的,它不是 C++11 标准的一部分。该标准仅定义引用折叠规则,通用引用的抽象只是为了更容易理解这些规则的工作原理。
关于c++ - 我如何获取指向通用引用的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161231/