C++ 以下哪种实现更快?

C++ 以下哪种实现更快?,c++,matrix,macros,functional-programming,C++,Matrix,Macros,Functional Programming,我要做的是用未知变量填充特定矩阵的值 以下是第一个实现: #define PHI(I,J,K) phi[xlength*ylength*(I)+xlength*(J)+(K)] //Macro that calls function 其中,φ是尺寸为xlength*ylength*tlength的一维矩阵 或 另一个选项是定义一个函数,如 void PHI(double *&phi, int &I, int &J, int &K, double &val

我要做的是用未知变量填充特定矩阵的值

以下是第一个实现:

#define PHI(I,J,K) phi[xlength*ylength*(I)+xlength*(J)+(K)] //Macro that calls function
其中,φ是尺寸为xlength*ylength*tlength的一维矩阵

另一个选项是定义一个函数,如

void PHI(double *&phi, int &I, int &J, int &K, double &value) //declare function
{
   phi[xlength*ylength*I+xlength*J+K]=value; //return specific value of phi
}
我会将宏或函数用于以下内容:

for (int i=0;i<tlength;i++) //just making a loop here
{
  for (int j=0;j<ylength;j++)
  {
    PHI(i,j,1)= stuff here //The macro or the function would go here
  }
}

for(int i=0;i很可能没有任何区别。编译器将内联函数,就像它内联宏一样。由于宏在调试器中更难使用,请使用函数


正如我经常说的“哪个性能更好”,您应该始终对不同的选项进行基准测试,因为编译器的差异在某些情况下会产生一些小的差异(在其他情况下会产生很大的差异)。在SO或其他网站上提问只会告诉你其他人的想法,而不会告诉你真实案例中发生了什么。

通过测试你的程序来找出答案。堆栈溢出成员可能很聪明,但他们的大脑肯定没有现代CPU的计算能力。哦,好吧。哈哈!我只是在检查pas将所有这些内容赋给函数或简单地使用宏会更快。如果未知,我想我可以测试它。@H2CO3但我可以这样使用宏,对吗?在宏中有for循环中的变量是可以的,对吗?在什么意义上是可以的?如果它编译,那么它的语法是正确的。
for (int i=0;i<tlength;i++) //just making a loop here
{
  for (int j=0;j<ylength;j++)
  {
    PHI(i,j,1)= stuff here //The macro or the function would go here
  }
}