小编Yas*_*nub的帖子

"this"指针只是编译时间吗?

我问自己this指针是否可能被过度使用,因为我通常在每次引用成员变量或函数时都使用它.我想知道它是否会产生性能影响,因为必须有一个指针需要每次都被解除引用.所以我写了一些测试代码

struct A {
    int x;

    A(int X) {
        x = X; /* And a second time with this->x = X; */
    }
};

int main() {
    A a(8);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,即使-O0他们输出完全相同的汇编程序代码.

此外,如果我使用成员函数并在另一个成员函数中调用它,它会显示相同的行为.那么this指针只是编译时间而不是实际指针吗?或者是否存在this实际翻译和解除引用的情况?我使用GCC 4.4.3 btw.

c++ gcc this this-pointer

47
推荐指数
8
解决办法
7519
查看次数

为什么将具有不同参数类型的函数存储到带有void *参数UB的函数指针中?

我最近偶然发现了一个有趣的问题(至少我认为是)。一个小例子:

#include <stdio.h>

typedef struct A {
    int x;
} A;

int (*func)(void*, void*);

int comp(A* a, A* b) {
    return a->x - b->x;
}

int main() {
    func = comp;
    A a;
    A b;
    a.x = 9;
    b.x = 34;
    printf("%d > %d ? %s\n", a.x, b.x, func(&a, &b) > 0 ? "true" : "false");
}
Run Code Online (Sandbox Code Playgroud)

我问自己以上显示的代码是否有效,但在编译时,GCC发出了警告:warning: assignment from incompatible pointer type。我进行了一些研究,有人在一个线程中说,上面的行为是不确定的,现在我很奇怪为什么是UB,因为void*可以将其保存为任何其他类型。只是标准的说法是“没有定义”,还是有一些可以解释的原因?我发现所有关于StackOverflow的问题都陈述了它的UB,但不完全是原因。也许与如何在内部取消引用函数指针有关?

c function-pointers

4
推荐指数
1
解决办法
75
查看次数

标签 统计

c ×1

c++ ×1

function-pointers ×1

gcc ×1

this ×1

this-pointer ×1