相关疑难解决方法(0)

为什么"使用命名空间std"被认为是不好的做法?

我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::coutstd::cin直接代替.

为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?

c++ namespaces using-directives std c++-faq

2486
推荐指数
36
解决办法
78万
查看次数

大数组大小的分段错误

以下代码在2Gb机器上运行时给出了分段错误,但在4GB机器上运行.

int main()
{
   int c[1000000];
   cout << "done\n";
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

阵列的大小只有4Mb.可以在c ++中使用的数组大小是否有限制?

c++ arrays segmentation-fault

103
推荐指数
3
解决办法
9万
查看次数

C++ 全局和非全局数组的区别(Stackoverflow Exception)

当我编写以下程序时,它可以正常工作,即在 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++ stack-overflow arrays out-of-memory bitset

4
推荐指数
1
解决办法
1504
查看次数

为什么我要花很长时间来编译这个简单的 C++ 代码

当我尝试编译这样的 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)

c++ macos compilation g++

4
推荐指数
1
解决办法
153
查看次数