首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++:我应该使用'typedef'还是'using namespace'?

在C++中,typedefusing namespace都是用于简化代码和提高可读性的。它们的用途和优劣势如下:

  1. typedef

typedef主要用于为现有的类型创建别名。这可以使代码更简洁,更易于阅读。例如,如果你想为一个长类型创建一个简短的名字,可以使用typedef

代码语言:cpp
复制
typedef long long ll;

然后,你可以在代码中使用ll作为long long的简称:

代码语言:cpp
复制
ll myNumber = 1234567890;

优势:

  • 提高代码可读性。
  • 允许为现有类型创建别名。

劣势:

  • 不适用于命名空间。
  • 不支持模板。
  1. using namespace

using namespace用于将命名空间中的所有名字导入到当前作用域,使得不需要使用命名空间前缀即可访问命名空间中的名字。这可以减少代码中的重复和提高可读性。例如,如果你想使用std命名空间中的所有名字,可以使用using namespace

代码语言:cpp
复制
using namespace std;

然后,你可以在代码中直接使用std命名空间中的名字,而无需使用std::前缀:

代码语言:cpp
复制
vector<int> myVector;

优势:

  • 提高代码可读性。
  • 支持命名空间。
  • 支持模板。

劣势:

  • 可能导致命名冲突。
  • 不推荐在头文件中使用。

总结:

在大多数情况下,推荐使用using namespace,因为它提供了更好的可读性和更灵活的使用方式。然而,在编写头文件或处理潜在命名冲突的情况下,应谨慎使用using namespace。在这种情况下,可以考虑使用typedef来为特定类型创建别名。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

函数指针

前言: 先看两个基础,函数指针和extern关键字,然后由一个具体的例子,具体使用下函数指针。 一、基础 函数指针:即指向函数的指针,本质还是一个指针。...+的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,因为C++支持函数的重载。...二、举例 这里说一下背景,假如我这里做一个平台,一套代码要交付到多个产品,然后结合产品代码进行使用,那么做平台肯定不能为每个产品做一套代码,但是有时候同样一个功能,各个产品之间会出现差异,这个时候指针函数就派上用场了...代码如下: 平台代码: #include #include"lib_main.h" using namespace std; funcs g_hook_func; void hook_func_init...,应该是一套lib和一套产品放在一个工程下运行。

1K60
  • C++C++入门

    C++基于C语言产生,是在C语言的基础上实现的,也就是说:C++兼容C语言的语法 java、c++都是面向对象的语言 二、C++关键字 在网站上找到了C++的关键字,C++一共有63个关键字,其中包含着...)使用using namespace命名空间名称引入 #include namespace slm { int r = 1; int Add(int x, int y)...); return 0; } 四、输入输出 #include //std是标准库的命名空间名,C++中标准库的定义都放在这个命名空间中 using namespace std;...+标准库的命名空间,使用using namespace std 可以全部展开,不全部展开也有别的使用方法:也就是std:: int main() { int a; double b;...来取别名,但是typedef的局限性在于不能识别类型,所以auto关键字就出现了 老标准:使用auto修饰的变量,是具有自动存储器的局部变量,但局部变量默认就是自动存储器,所以没人使用 C++11的新标准

    15211

    C++的奇迹之旅】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例

    d\n", Asen::a); printf("%d\n", b); return 0; } 使用using namespace 命名空间名称 引入 using namespace Asen; int...难以控制 直接使用using namespace没有办法精细控制导入的范围,无法选择性导入某些名称。 因此一般来说,不推荐在头文件中使用using namespace,在源文件中使用也应谨慎。...还是会编译报错: #include"Queue.h" #include"Stack.h" namespace xjh { typedef struct Stack { }ST; void...#include // std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中 using namespace std; int main() { cout...因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要, 们再学习。 std命名空间的使用惯例 std是C++标准库的命名空间,如何展开std使用更合理呢?

    13710

    C++入门 类与对象 上

    C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。...namespace std; // C++升级struct升级成了类 // 1、类⾥⾯可以定义函数 // 2、struct名称就可以代表类型 // C++兼容C中struct的⽤法 typedef struct...#include using namespace std; class Date { public : void Init(int year, int month, int day...this指针 • Date类中有Init和Print两个成员函数,函数体中没有关于不同对象的区分,那当d1调⽤Init和Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?...通过下⾯两份代码对⽐,我们发现C++实现Stack形态上还是发⽣了挺多的变化,底层和逻辑上没啥变化。

    7810

    一个C#开发者重温C++的心路历程

    > using namespace std; int main() { string str = "Hello World!...好吧,一开始也的确是这么想的。 后来发现,头文件,原来并不是单纯的提取代码,还是跨文件调用的基础。...#include using namespace std; 在上面,我们提到过,使用字符串类型string时,需要引用头文件string.h和使用命名空间std,那么现在使用Cout...但是说实话,定义一个枚举一样好记忆,而且适用场景更加丰富,所以,个人感觉这个功能是有点鸡肋,不过C++好多代码都使用了宏,所以还是需要了解起来。...这应该报错啊,应该不允许把i的地址给*ipointer啊。 呃。。。还是那句话,就是这么屌。。。 -> ->这个符号大概是指针专用的。下面我们来看这样一段代码来了解->。

    83330

    C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

    = m.end()) { } return 0; } 使用typedef给类型取别名确实可以简化代码,但是typedef又会遇到新的难题: #include typedef...char* solve; int main() { const solve p1; // 编译成功还是失败?...3.2 -> auto简介 在早期C/C++中auto的含义为:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,为什么呢?...4.2 -> 范围for的使用条件 for循环迭代的范围必须是确定的 对于数组而言,就是数组中的第一个元素和最后一个元素的范围; 对于类而言,应该提供begin和end方法,begin和end就是for...不论采取哪种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: #include using namespace std; void p(int) { cout <<

    13910

    c++中typename、typedef以及using关键字用法

    c++的标准库中,因为类继承关系比较复杂和模板使用比较多的原因,源代码中充斥着typename、typedefusing这三个关键字,所以在继续剖析标准库源码之前,今天就来介绍一下这三个关键字的作用...二、typedef关键字 还是这段代码,我们添加一行: #include using namespace std; template<typename _Tp...三、using关键字 对于using关键字,最开始知道是因为这行代码: using namespace std; 所以它的第一个作用就是声明命名空间,使用形如using namespace 命名空间名...还有一种形式是: using std::cout; using std::endl; 这种就是只单独声明命名空间里面的某个名字,命名空间里面其他的东西是无法直接使用的,此时我们只能使用cout和endl... using namespace std; template class AA { using

    97330

    c++标准输入输出流关系梳理

    输入输出是每一种编程语言必不可少的部分,c++也不例外,下面我们就来说明c++的标准输入输出的前世今生。...,另外推荐直接使用iostream,毕竟iostream.h是很多年前的老物件了,标准c++中已经明确不适用了,以后有可能被淘汰。...> using namespace std; 可见凡是要使用标准c++输入输出,都需要加上using namespace std。...typedef basic_fstream fstream; 为了叙述方便,后续我们直接使用以上实例类来代指模板类,下面用一张图说明这些类之间的关系: ?...说到这里,想问一下,有多少人最开始接触iostream的时候首先使用的是cin和cout呢,其实通过iostream头文件,我们可以看到,我们常用的cin对象就是istream的一个实例,而cout则是

    87410

    C++入门篇】保姆级教程篇【上】

    很遗憾告诉你,还是不行,这就要涉及到using namespace std;这条语句了,那这是什么意思呢?那个头文件也和C语言也不一样啊,又是什么意思呢?让来一一为你介绍。... #include #include #include namespace byte{ typedef int...里面在Test()中想要访问栈每次都需要在造作前面加上这么一些东西,写起来也很麻烦,所以祖师爷就规定了一种配套的关键字——using使用方法是:using namespace 空间名;这样就可以展开命名空间...namespace还有一种局部展开的方式,将命名空间内的常用的变量或函数名局部展开,防止命名空间内的其他变量会与程序发生冲突,使用方法是:using 空间名::变量/函数名等 这样也是比较常用的展开方式...+的一些库里这种方式也很常见,但是嵌套太多层也是坑的很,还是谨慎使用嵌套功能为好。

    11810

    QT编写DLL给外部程序调用,提供VCC#C调用示例(含事件)

    方案一: 用自己最熟悉的QT来写,毕竟QT也是C++的一种嘛,应该可以和VC通用的。初步实验,你妹啊,调用不起来,直接废弃。 方案二: 找VC高手,自己掏钱出来找人写,客户是上帝,那可不能耽误呢!...各大群里发消息,无奈高手要价太高(一个简单的socket通信封装,协议都有,熟手估计半天,要价8K有点高),绝大部分答话者使用.NET和JAVA语言,这个编写DLL肯定不大适合,你想想提供个DLL还要客户安装个框架...搞就搞,新建MFC DLL,的妈呀,VC的命名规则实在让人抓狂!半自动语法提示更是让有种自杀的冲动!安装了visualAssistX,还是不爽!话说编程也要带着快乐的心情嘛,所以果断放弃!...第五步:编写C#程序测试  1 using System;  2 using System.Collections.Generic;  3 using System.Text;  4 using System.Runtime.InteropServices...;  5  6 namespace qtdllTestNET  7 {  8 class Program  9     { 10 //声明DLL中的函数 11         [DllImport("

    75820

    C++】——入门基础知识

    ::b; int main() { printf("%d\n", N::a); printf("%d\n", b); return 0; } .使用using namespace 命名空间名称...C++输入&输出 新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物, 那C++是否也应该向这个美好的世界来声问候呢?我们来看下C++是如何来实现问候的。...#include // std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中 using namespace std; int main() { cout<...std命名空间的使用惯例: std是C++标准库的命名空间,如何展开std使用更合理呢? 1. 在日常练习中,建议直接using namespace std即可,这样就很方便。...= m.end()) { //.... } return 0; } 使用typedef给类型取别名确实可以简化代码,但是typedef有会遇到新的难题: typedef char* pstring;

    10710
    领券