c++ - 我如何获取指向通用引用的指针?

标签 c++ templates c++11

我有这个代码:

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/

相关文章:

c++ - 如何创建 src/code 以及 lib/libraries 可访问的全局对象?

c++ - 我在关于 C++ 的陈述中遗漏了什么吗?

javascript - Django - 手动表单字段渲染添加类

c++ - 如何访问模板包参数的模板参数

C++ Visual Studio Express - 分配返回值失败函数

c++ - 链接器命令因一堆 undefined reference 而失败

c++ - 在 main() 中为通用模板类选择数据类型

c++ - 传入 A::operator new() 的大小是否总是等于 sizeof(A)?

c++ - 在构造函数初始化器中使用 map 的初始化器列表

c++ - 自动克隆 unique_ptr