使用repl,这似乎是完全合法的,但是这里有没有任何未定义的行为/特定于编译器的问题?
https://repl.it/repls/ContentPutridMacro
查找标题中的'this'用法似乎并没有发现任何有用的东西。如果repl链接不起作用,这是我的示例的副本。
#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;
};
#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”用法...
您可以在非静态数据成员初始化程序中使用this
。 C ++ 17标准在[expr.prim.this] / 3。段中明确提到了这一点。
this
是否出现在标题内无关紧要。标头只是其中的一部分,当包含标头时,它会“粘贴”到另一个文件中。