小编loc*_*zed的帖子

三元运算符缓存不友好吗?

在使用缓存模拟器(在创建内存跟踪之前使用 gcc 和 -O3 编译代码)时,发生了一件有趣的事情。

以下代码:如果被定义为三元运算符宏,a[i] = min(a[i], b[j])则会导致 4 次内存访问:如果被定义为 ,则会导致 3 次内存访问。minmin(x, y) (((x) < (y)) ? (x) : (y))minif (a < b) then a else b

显然,模拟器会获取宏中的所有变量(甚至是分支中未采用的变量),但if-else不会执行此操作。这只是模拟器固有的问题/错误,还是三元运算符的真正问题?

c c++ gcc caching ternary-operator

3
推荐指数
1
解决办法
235
查看次数

C++中的类继承

下面的代码将从B类调用函数F,但有人可以向我解释为什么会这样.是否有可能来自B类的方法重载来自V类的方法(因为B是从V继承的)?提前致谢.

#include <iostream>
using namespace std;

class V{
public: 
    void f(){ x+=2; cout << "V:"<< x;};
    int x;
};
class B: public virtual V{
public:
    void f(){ x+=3; cout << "B:"<< x;};
    int x;
};
class D: public B, virtual public V{
public:
    void g(){   x++;    f();    }
};
void main(){
    D ins;
    ins.x = 1;
    ins.g();
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance overloading class

2
推荐指数
1
解决办法
91
查看次数

标签 统计

c++ ×2

c ×1

caching ×1

class ×1

gcc ×1

inheritance ×1

overloading ×1

ternary-operator ×1