【发布时间】:2012-12-07 11:56:54
【问题描述】:
是否有一个标准的 C++ 函数,它类似于 Address-of 运算符 &,我可以将它用作带有 std::transform 和 std::compose1 等 stl 实体的函数对象?
【问题讨论】:
标签: c++ stl functor memory-address
是否有一个标准的 C++ 函数,它类似于 Address-of 运算符 &,我可以将它用作带有 std::transform 和 std::compose1 等 stl 实体的函数对象?
【问题讨论】:
标签: c++ stl functor memory-address
std::addressof 可能适合您的目的。请注意,如果该类型具有该运算符的重载,则其行为与普通的 operator& 略有不同。
【讨论】:
T 重载operator char & 的情况下,C 样式转换(char&) 是static_cast 是错误的实现? ideone.com/7aGun5
我想你要找的是std::addressof。
【讨论】:
std::function 或std::ptr_fun 包装它,以便与compose1 一起使用。并不是说compose1 是标准的。
char&,获取地址,然后转换回T*,避免T 上的任何operator& 过载。如果您不需要“真实”地址(即您很乐意调用重载的operator&),那么它就更简单了:template <typename T> T* ampersand(T &t) { return &t; }。
reinterpret_cast 到char&。不要 static_cast 或 C 样式转换,以防类也重载 operator char &。然后在处理 const 限定类型时会遇到一些麻烦(因为 reinterpret_cast 无法从引用中删除 cv 限定符)。即使这样,它仍然是单行的,只需查看 Boost 源代码。