在外部函数中有一个变量初始化或在内部函数中有多个变量初始化是否最有效?

时间:2017-09-20 20:24:39

标签: c++

此:

int something(num){
    int arr[] = {1,3,5,7};
    //check if num is in arr... If yes, return num, otherwise return 0.
}

int main(){
    something(5);
    return 0;
}

Vs以上。

int something(num, &parr){
    //check if num is in parr... If yes, return num, otherwise return 0.
}

int main(){
    int arr[] = {1, 3, 5, 7};
    something(5, arr);

    return 0;
}

为什么?我会选择相信第二个是最有效的,因为只会发生一次数组初始化,而在代码1中,每次调用something()时都会发生数组初始化;并且不进行初始化需要时间来执行?

1 个答案:

答案 0 :(得分:1)

在速度测试选项A与选项B中,答案是,"很难说。"你必须剖析并找出答案。智能编译器可能会注意到arr永远不会更改,并且永远不会被修改并相应地进行优化。

但是...

arr应该尽可能地保持用于提高可读性的位置,因此这是选项A的一个点。另外,将arr声明为static变量会消除完全重新初始化问题。

int something(int num){
    const static int arr[] = {1,3,5,7}; // const so it is harder to accidentally change
    //check if num is in arr... If yes, return num, otherwise return 0.
}

作为staticarr只被初始化一次,并且一直持续到程序结束(在资源受限的环境中可能是它自己的问题)。