- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在获取对象的地址时,如何确定是否需要 addressof(x)
而不是 &x
?
似乎这个问题令人困惑,所以需要澄清一下:
addressof
显然绕过了重载的地址操作符。 我已经知道了。
我想知道的是:
我怎么知道这是否是我真正想做的事情? (尤其是在模板内等时)
是否有某种“规则”可以帮助我确定何时需要 addressof
而不是 &
?
毕竟,它们都返回对象的“地址”,那么我什么时候使用呢?
最佳答案
您在必要时使用 std::addressof
。可悲的是,“当你必须”包括任何时候你在模板代码中工作并想要将未知类型的变量 T
或 T&
变成一个诚实的指针到那个变量的内存中。
因为 C++ 委员会愚蠢地允许引用运算符的重载(几乎没有合法目的),所以用户可以用某种类型来实例化您的模板,而您不能使用引用运算符来获取实际的指针. std::addressof
是一种解决使用这种可疑 C++ 功能的用户的方法,以便执行该语言应该保证的工作。
简而言之,这是一个针对语言愚蠢的库修复。如果您想确保用户不会破坏您的代码,请在模板代码中使用它而不是 &
。如果可以信任您的用户不会使用这个构思不周的功能,那么您可以使用 &
。
关于c++ - 何时使用 addressof(x) 而不是 &x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14820307/
我需要以一种或另一种方式将 groupID(和另一个整数)链接到我动态添加的按钮。有什么想法吗? 我可以做什么; AddHandler mybutton.Click, AddressOf PrintM
关于我的other question 如何获取 CFuncType 对象的地址(实际函数指针)? addressof() 没有报告正确的地址。 C 代码: extern "C" _declspec(d
我有一个算法,可以将指针转换为类 std::vector input; std::vector ptrs; std::vector output; 所以为了获得ptrs我做 transform(i
所以几天前我了解了 std::addressof。在 http://en.cppreference.com/w/cpp/memory/addressof给出了一个可能的实现: template T*
出于某些教育原因,我通过将引用运算符 & 重载为已删除的成员函数或作为 private 方法,设法阻止其他人获取我的类对象的地址.但是 C++11 提供了一个新的模板化函数 std::addresso
我需要在我正在开发的类中使用多个 Windows API 函数,用于一个业余爱好项目。其中几个函数需要使用 AddressOf 运算符,但根据Microsoft Documentation ,禁止在类
我想运行一个简单的代码段,但每次 Access 和 Excel 都会崩溃。 我正在运行 CallbackTest2,你能帮帮我吗?谢谢分配。 Declare Function CallWindowPr
这个问题已经有答案了: What type of address returned on applying ampersand to a variable or a data type in C/C+
如果我没有编译代码,我会说 1 和 2 给出相同的结果,因为它们都有一个 int指针p指向变量age。在 1 和 2 中取消引用 age 应该会得到相同的结果。我还知道 3 只会给我变量 age 的第
我怎样才能使下面的代码工作? for (auto f=face.begin(); f!=face.end(); ++f) { if (std::addressof(*f) == 0x18b91
我可能在这里遗漏了一些东西。我需要存储新分配的内存块的指针地址。 我这样做: void* buffer = _aligned_malloc(4096,4); assert(buffer
这个问题在这里已经有了答案: Is pointer arithmetic on inactive member of a union UB? (2 个答案) 关闭 4 年前。 下面的代码尝试在 C+
任何人都可以帮我解决 C# 中关于 VB6 中的 AddressOf 运算符 的替代解决方案吗? AddressOf 返回一个长值。我可以通过什么方式获取 C# 中的输出? 最佳答案 扩展 Harpe
我需要写一个 constexpr addressof 函数,但我觉得不可能。有谁知道这是否可能? cppreference.com 中的引用实现: template T* addressof(T& a
Clang 和 GCC(MSVC 除外)在模板参数传递时无法解析 std::addressof作为模板函数的参数。以下是此类错误的示例: std::vector v{1,2,3,4,5}; std::
sizeof(long) 返回 8 个字节,但 &along(long 的地址)是 12 个十六进制数字(48 位)或 6 个字节。在使用 clang 编译的 OS X 64 位上。这里有差异还是这是
代码: public Thread ThreadReceive; ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessag
在获取对象的地址时,如何确定是否需要 addressof(x) 而不是 &x? 似乎这个问题令人困惑,所以需要澄清一下: addressof 显然绕过了重载的地址操作符。 我已经知道了。 我想知道的是
我在将我的 VB6 项目转换为 VB.NET 时遇到了一些问题 我不明白这个“AddressOf”函数在 VB.NET 中应该如何 我的 VB6 代码: Declare Function MP4_Cl
我正在使用std::cout进行日志记录,并且当“请勿使用'cout'的地址,而是从lambda调用它的地址“时,sonarqube报告错误。 std::ostream *streamp; strea
我是一名优秀的程序员,十分优秀!