问题标签 [this-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3132 浏览

c++ - 为什么调用 std::call_once() 时需要这个指针?

在《C++ Concurrency in Action》第 3.3.1 节中,在介绍类成员的线程安全延迟初始化 usingstd::call_once()时,给出了以下示例:

从其文档中,第三个参数是传递给函数的参数X::open_connection()。为什么在没有输入参数的情况下调用时this需要指针?std::call_once()X::open_connection()

PS:删除this指针会导致C2064错误:

error C2064: term does not evaluate to a function taking 0 arguments


更新:在介绍类似功能时,此问题在“C++ Concurrency in Action”一书的第 4.2.1 节中进一步明确解决,即std::async

如果第一个参数(应该是 的第二个参数std::call_once)是指向成员函数的指针,则第二个参数(应该是 的第三个参数std::call_once)提供应用成员函数的对象(直接或通过指针,或包裹在std::ref) 中,其余参数作为参数传递给成员函数。否则,第二个(应该是 的第三个std::call_once)和后续参数作为参数传递给指定为第一个参数的函数或可调用对象。

0 投票
1 回答
355 浏览

c++ - 指针“this”的地址在指向成员函数调用的指针内意外更改

我对指向成员函数调用的指针有疑问。函数指针调用外部的指针“this”的地址与调用内部不同,因此所有对类变量的访问都会导致错误的值。

我在这里包含代码。

这是输出:

因此语句 _a += 100; 不改变_a。它更改了地址 (&_a + 4)。

我不知道如何解决这个问题。请帮我解决。

0 投票
1 回答
1092 浏览

c++ - 对于级联成员函数调用,为什么我需要返回引用?为什么只有 this 指针还不够?

  1. 为什么我不能只返回带有 this 指针的对象来进行级联函数调用?
  2. 为什么我需要返回对象的引用?
  3. 那还能做什么?
0 投票
1 回答
727 浏览

javascript - 聚合物 this-pointer

我正在使用 Polymer 框架,我非常喜欢它。但我不明白的一件事是与 this 指针的混淆。例如,当从自定义组件中的按钮调用函数时,this 指针指向自定义组件。非常合乎逻辑。但是当自定义组件中的函数从外部调用时,例如来自库的回调或来自另一个组件的调用,this 指针是完全不同的。为什么在这种情况下不指向函数所在的自定义组件?

0 投票
2 回答
361 浏览

c++ - “this”指针的指针运算

如果有的话,对 C++ 的“this”指针执行指针算术有哪些合法和/或有趣的用途?

为了让 SE 对这个问题的长度感到满意,我将包含一些相关代码。

0 投票
3 回答
446 浏览

c++ - 非多态继承会发生这种指针调整吗?

非多态继承需要这种指针调整吗?在我看到的所有情况下,指针调整都讨论了使用的示例涉及通过关键字进行多态继承virtual

我不清楚非多态继承是否需要这种指针调整。

一个非常简单的例子是:

以下函数调用是否需要此指针调整?

在这种情况下,this 指针的调整显然是多余的,因为没有访问数据成员。另一方面,如果继承的函数访问数据成员,那么这种指针调整可能是一个好主意。另一方面,如果成员函数没有内联,那么无论如何都需要进行指针调整。

我意识到这是一个实现细节,而不是 C++ 标准的一部分,但这是一个关于真实编译器行为的问题。我不知道这是否像 vtables 那样所有编译器都遵循相同的一般策略,或者我是否问过一个非常依赖于编译器的问题。如果它非常依赖于编译器,那么这本身就是一个足够的答案,或者如果您愿意,您可以专注于 gcc 或 clang。

0 投票
2 回答
767 浏览

c++ - 当 C++ 中的对象调用不带参数的成员函数时会发生什么

假设我们有一个成员函数,class XX f()返回一个对象class X并且不接受任何参数。

所以如果它被 的一个对象调用class X,sayX obj就是这个对象。

因此,如果我们调用obj.f(),则根据 C++ 规则,一个秘密参数将传递给函数f(),它是this对象的指针,其中包含调用对象的地址f()

所以我的困惑是它是如何由 C++ 管理的,因为这意味着我们在 C++ 中永远不可能有一个没有参数的成员函数,因为每次都会传递一个秘密参数。

对于带有参数 say 的函数func(int a),它实际上是一个可以接受 2 个参数的函数,其中一个参数是秘密参数(this指针),另一个是int a.

那么,如果我们严格要求 C++ 中的成员函数完全没有参数(如中断服务例程的情况),我们该怎么办?

如果我错了或者我错过了一些概念,请告诉我。

0 投票
0 回答
748 浏览

python - ctypes回调函数使Python崩溃-“this”指针参数?

我正在使用 ctypes 从 Python 调用 C dll,并且在将正确的参数传递给IBSU_RegisterCallbacks下面定义的函数时遇到了一些麻烦。

它将最终参数描述为:

一个有效的 C++ 示例调用该函数,如下所示:

到目前为止,在 Python 中,我有以下代码(仅显示相关部分),它在事件触发并callback run!打印后不久使 Python 崩溃(无回溯)。

this在我的 Python 类中,我可以发送而不是仅c_void_p()在最后一行代码中的等价物是什么?即使在我的 Python 回调函数触发后,错误地获取此参数也会导致崩溃吗?

0 投票
3 回答
694 浏览

c++ - 在构造函数的初始化列表中使用“this”对 Qt 来说特别危险吗?

我需要关于“这个”主题的可靠信息:

当然,在构造函数 OR 初始化列表中调用虚函数是个坏主意。问题是:这个代码可以吗

导致未定义的行为?!如果是这样:为什么?

如果可以的话,请引用您的来源!谢谢!

0 投票
1 回答
177 浏览

c++11 - 将“this”作为右值返回

正如预期的那样,以下代码不会编译

将 A 类更改为

使程序编译。但是,使用 std::move 返回右值通常不是一个好主意,因为它会返回悬空引用或阻止编译器进行某些优化。

所描述的案例是经验法则“不按右值返回”的少数例外之一,还是应该以不同的方式解决问题?

太谢谢了!