'this'指针是否可以在c ++头声明中使用?

问题描述 投票:1回答:1

使用repl,这似乎是完全合法的,但是这里有没有任何未定义的行为/特定于编译器的问题?

https://repl.it/repls/ContentPutridMacro

查找标题中的'this'用法似乎并没有发现任何有用的东西。如果repl链接不起作用,这是我的示例的副本。

Multiplier.h:

#include <functional>

class Multiplier
{
public:
  Multiplier(int i);

  void multiplyBy(int j);

  std::function<void()> multiplyBy100 = std::bind(&Multiplier::multiplyBy, this, 100);

private:
  int priv;
};

Multiplier.cpp:

#include <stdio.h>
#include "Multiplier.h"

Multiplier::Multiplier(int i) : priv(i)
{
  // empty
}

void Multiplier::multiplyBy(int j)
{
   printf("value = %d\n", priv * j);
}

我目前的理解是,当您创建Multiplier实例时,说>]

Multiplier m(25);

它将创建一个Multiplier对象,并将其所有成员变量放入堆栈,其中一个是

std::function<void()> multiplyBy100

表示实例可以知道'this'应该指向什么值。也许我想得太多了,但是我之前从未见过类似的东西。

谢谢您的帮助!

使用repl,这似乎是完全合法的,但是这里有没有任何未定义的行为/特定于编译器的问题? https://repl.it/repls/ContentPutridMacro搜索“ this”用法...

c++ oop this stdbind
1个回答
0
投票

您可以在非静态数据成员初始化程序中使用this。 C ++ 17标准在[expr.prim.this] / 3。段中明确提到了这一点。

this是否出现在标题内无关紧要。标头只是其中的一部分,当包含标头时,它会“粘贴”到另一个文件中。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.