gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:16:00 25 4
gpt4 key购买 nike

使用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”应指向的值。也许我想得太多了,但是我之前从未见过类似的东西。
感谢您的帮助!

最佳答案

您可以在非静态数据成员初始化程序中使用this。 C++ 17标准在[expr.prim.this] / 3段中明确提到了这一点。
this是否出现在标题中是无关紧要的。 header 只是一段代码,当包含时,它会“粘贴”到另一个文件中。

关于c++ - 'this'指针是否可以在c++头声明中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61925250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com