Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在将要在循环中调用的方法中声明整数是一种好做法吗?_C++_C++11 - Fatal编程技术网

C++ 在将要在循环中调用的方法中声明整数是一种好做法吗?

C++ 在将要在循环中调用的方法中声明整数是一种好做法吗?,c++,c++11,C++,C++11,在我的代码中,我有一个方法,我需要声明一个方法来计数,我可以在方法中声明变量吗 bool CheckArrays(int arrArg1[5][9], vector <int> arrArg2) { int idk; return true; } int main() { while(true) { CheckArrays(X, X2); } } 正如您所看到的,每次他在声明int idk的函数CheckArrays中调用函

在我的代码中,我有一个方法,我需要声明一个方法来计数,我可以在方法中声明变量吗

bool CheckArrays(int arrArg1[5][9], vector <int> arrArg2)
{
    int idk;
    return true;
}

int main()
{
    while(true)
    {
        CheckArrays(X, X2);
    }
}
正如您所看到的,每次他在声明int idk的函数CheckArrays中调用函数CheckArraysX,X2时,这是最好的做法吗


它每次声明都会浪费内存吗?以一个更大的方法为例。

它不会浪费任何内存,该变量在堆栈中,在函数结束时停止存在。但是是的,每次你调用函数时它都会被重置

如果希望值是持久的,请将其设置为静态int。此变量将不再在堆栈中,但只分配一次

我可以在方法中声明变量吗

bool CheckArrays(int arrArg1[5][9], vector <int> arrArg2)
{
    int idk;
    return true;
}

int main()
{
    while(true)
    {
        CheckArrays(X, X2);
    }
}
对。不仅如此,这也是最好的方法

我担心的是每次它都会声明变量,我担心浪费内存或删除数据idk

我敢打赌这不会成为性能瓶颈。计算机被装备来处理更复杂的问题

每次都声明它,浪费内存


每次调用函数时都会初始化变量,但不会浪费内存。这是最好的方法。

简单地声明一个整数并且从不将其用于任何事情是绝对免费的,因为如果您启用了优化(如果您关心性能),编译器只需将其从生成的二进制文件中删除即可


假设您的实际代码确实使用了整数,它仍然几乎是免费的;在函数执行时,它将根据您的CPU体系结构额外占用4或8个字节的堆栈空间,但这是一个不值得担心的微不足道的RAM量。除非您获取或设置它的值,否则它不会占用任何额外的CPU周期,即使获取或设置整数的值非常接近,您也不必担心它。

它不仅很好,而且是推荐的。变量应该在尽可能小的封闭范围内声明。当方法被输入时,这一个将在堆栈上分配,当方法退出时取消分配,基本上没有成本。

您检查过二进制文件的输出了吗?现在的编译器相当聪明,很可能会创造奇迹。不要过早地优化,除非你有证据证明这是一个瓶颈。再加上你的指尖上有大量令人讨厌的记忆,这不是1960年代;我不知道第一句话是什么意思如果堆栈上有1个int是令人担忧的,那么所有程序员的头发早就变白了。你不应该为此担心。事实上,如果不是所有的程序员都会鼓励你考虑把小的变量放在堆栈上作为首选的选择,那是最安全的地方来放置一个你不希望另一个线程访问的变量。然而,通过拷贝传递std::vector……数据竞争问题和麻烦就开始了。@MichaëlRoy确实如此,尽管他显然离主宰多线程还有很长的路要走。