相关疑难解决方法(0)

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

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

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

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

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

正确初始化无符号字符的方法*

初始化的正确方法是unsigned char*什么?我目前正在这样做:

unsigned char* tempBuffer;
tempBuffer = "";
Run Code Online (Sandbox Code Playgroud)

或者我应该使用memset(tempBuffer, 0, sizeof(tempBuffer));

c c++ unsigned char

16
推荐指数
3
解决办法
7万
查看次数

新字符数组不会初始化为全零

我正在尝试为可变长度的字符串分配内存n.这是我的尝试:

int n = 4; // Realistically, this number varies.
char* buffer = new char[n * 512]();
printf("buffer[0:3] = [%d][%d][%d][%d]\n", buffer[0], buffer[1], buffer[2], buffer[3]);
Run Code Online (Sandbox Code Playgroud)

我的理解是,最后的包含()应该将所有元素初始化为零.但是,我注意到了.这是控制台的输出:

buffer[0:3] = [-120][-85][-45][0]
Run Code Online (Sandbox Code Playgroud)

如何使new初始化程序正常工作?

注意:我知道我可以使用std::fill,但我很好奇为什么new初始化程序不能像宣传的那样工作.

编辑:这是我修改后的方法std::fill,它给出了正确的行为.但我仍然想知道为什么这是必要的.

int n = 4; // Realistically, this number varies.
char* buffer = new char[n * 512]();
std::fill(&buffer[0], &buffer[n * 512], 0)
printf("buffer[0:3] = [%d][%d][%d][%d]\n", buffer[0], buffer[1], buffer[2], buffer[3]);
Run Code Online (Sandbox Code Playgroud)

这输出:

[0][0][0][0]
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

6
推荐指数
1
解决办法
904
查看次数

C语句的最大语句长度

C中定义的语句是否有最大长度?

编译器是gcc

c gcc

5
推荐指数
2
解决办法
3987
查看次数

标签 统计

c++ ×3

c ×2

c++-faq ×1

char ×1

gcc ×1

memory-management ×1

namespaces ×1

std ×1

unsigned ×1

using-directives ×1