我已经告诉别人,编写using namespace std;
代码是错误的,我应该用std::cout
和std::cin
直接代替.
为什么被using namespace std;
认为是不好的做法?是低效还是冒着声明模糊变量(与名称std
空间中的函数具有相同名称的变量)的风险?它会影响性能吗?
以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.
int main()
{
int c[1000000];
cout << "done\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?
当我编写以下程序时,它可以正常工作,即在 main() 方法之外声明了 bitset 数组。
正确工作
#include <iostream>
#include <bitset>
using namespace std;
bitset<5000> set[5000];
int main(){
cout<<"program runs fine"<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是当我在 main 方法中创建它时,我得到了堆栈溢出异常。谁能详细解释一下这里发生了什么?通常我会在递归方法中看到堆栈溢出异常。那么谁在这里使用堆栈?
#include <iostream>
#include <bitset>
using namespace std;
int main(){
bitset<5000> set[5000];
cout<<"program runs fine"<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不起作用并抛出堆栈溢出异常
当我尝试编译这样的 C++ 代码时,需要 71 秒:
#include<bits/stdc++.h>
struct S{int v=1;}a[1<<25];
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将 1 更改为 0 时,它只需 1 秒即可编译:
#include<bits/stdc++.h>
struct S{int v=0;}a[1<<25];
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用类似的东西S(){v=1;}
,但我只想知道这个有趣的区别。
System: MacOS 12.4
Compiler: g++-11 (Homebrew GCC 11.3.0_2) 11.3.0
Run Code Online (Sandbox Code Playgroud)