使用using声明的两种方法是
using std::string;
using std::vector;
Run Code Online (Sandbox Code Playgroud)
要么
using namespace std;
Run Code Online (Sandbox Code Playgroud)
哪种方式更好?
=========满意答案下面=============
简而言之,在函数内使用声明是无害的,只要给出本地作用域关注,而全局使用声明是危险的,因为它们可能导致命名空间相交,从而使编译器混乱.
通常我们喜欢使用命名空间中的每个名称而没有限定条件.这可以通过为命名空间中的每个名称提供using声明来实现,但这很繁琐,并且每次在命名空间中添加或删除新名称时都需要额外的工作.或者,我们可以使用using-directive来请求命名空间中的每个名称都可以在我们的范围内访问而无需限定.[...] [...]使用using-directive从一个经常使用的知名库中获取名称,这是一种简化代码的流行技术.这是本书中用于访问标准库设施的技术.[...]在一个函数中,using-directive可以安全地用作符号方便,但是应该注意全局使用指令,因为过度使用可能导致命名空间被引入以避免名称冲突.[...]因此,我们必须谨慎使用全球范围内的使用指令.特别是,除非在非常特殊的情况下(例如,为了帮助转换),不要在头文件中的全局范围中放置using-directive,因为你永远不知道标头可能在哪里#included.
感谢Jonathan Wakely的报价.
更多此刻的好奇心,有没有办法知道initscr()的<ncurses.h>之前已经叫什么名字?我相信initscr()两次打电话是一个坏主意.
函数动态地创建一个int阵列,其元素是预定义的int[2].有没有办法让函数为该数组赋值,然后将其返回给调用者.
以下代码完成此任务但抛出警告: initialization from incompatible pointer type [enabled by default]
#include <stdlib.h>
#include <stdio.h>
int *get_values()
{
int (*x)[2] = malloc(sizeof(int[2])*3);
x[0][0] = 1;
x[0][1] = 2;
x[1][0] = 11;
x[1][1] = 12;
x[2][0] = 21;
x[2][1] = 22;
return x;
}
int main()
{
int (*x)[2] = get_values();
int i;
for (i=0; i!=3; i++)
printf("x[%d] = { %d, %d }\n", i, x[i][0], x[i][1]);
}
Run Code Online (Sandbox Code Playgroud)
我知道你动态分配两个维度的替代方案,但这是我很好奇的事情.