C++11 使用using定义别名(替代typedef)::作用域运算符

这篇具有很好参考价值的文章主要介绍了C++11 使用using定义别名(替代typedef)::作用域运算符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

typedef  一切合法的变量的定义可以转换为类型

typedef unsigned int uint_t;

 C++11 使用using定义别名(替代typedef)::作用域运算符

using: 

 C++11 使用using定义别名(替代typedef)::作用域运算符

示例如下: 

C++11 使用using定义别名(替代typedef)::作用域运算符

 C++11 使用using定义别名(替代typedef)::作用域运算符

 使用 typedef 重定义类型是很方便的,但它也有一些限制,比如,无法重定义一个模板。

 现在,在 C++11 中终于出现了可以重定义一个模板的语法。

C的写法/c++写法
C++11 使用using定义别名(替代typedef)::作用域运算符

 using与模板结合:

 

template<class T>
using Pointer = T*;

template<class T,int N>
using Array = T[N];

int main()
{
    Pointer<int> p;
    Pointer<double> sp;
    Pointer<char> cp;
   
    Array<int,100> a;
    Array<double,10> b;
}

C++11 使用using定义别名(替代typedef)::作用域运算符

 C++11 使用using定义别名(替代typedef)::作用域运算符

 using 的别名语法覆盖了 typedef 的全部功能。先来看看对普通类型的重定义示例,将这两种语法对比一下:

//重定义unsigned int
typedef unsigned int uint_t;
using uint_t = unsigned int;

//重定义std::map
typedef std::map<std::string, int> map_int_t;
using map_int_t = std::map<std::string, int>;

在重定义普通类型上,两种使用方法的效果是等价的,唯一不同的是定义语法。

typedef 的定义方法和变量的声明类似:像声明一个变量一样,声明一个重定义类型,之后在声明之前加上 typedef 即可。这种写法凸显了 C/C++ 中的语法一致性,但有时却会增加代码的阅读难度。比如重定义一个函数指针时:

typedef void (*func_t)(int, int);

 与之相比,using 后面总是立即跟随新标识符(Identifier),之后使用类似赋值的语法,把现有的类型(type-id)赋给新类型:

using func_t = void (*)(int, int);

 C++11 的 using 别名语法比 typedef 更加清晰。

 通过 using 可以轻松定义任意类型的模板表达方式。

template <typename T>
using type_t = T;
// ...
type_t<int> i;

::作用域运算符

       通常情况下,如果有两个同名变量,一个是全局变量,另一个是局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。

//全局变量
int a = 10;
void test(){
	//局部变量
	int a = 20;
	//全局a被隐藏
	cout << "a:" << a << endl;
}

       程序的输出结果是a:20。在test函数的输出语句中,使用的变量a是test函数内定义的局部变量,因此输出的结果为局部变量a的值。

       作用域运算符可以用来解决局部变量与全局变量的重名问题 

//全局变量
int a = 10;
//1. 局部变量和全局变量同名
void test(){
	int a = 20;
	//打印局部变量a
	cout << "局部变量a:" << a << endl;
	//打印全局变量a
	cout << "全局变量a:" << ::a << endl;
}

       这个例子可以看出,作用域运算符可以用来解决局部变量与全局变量的重名问题,即在局部变量的作用域内,可用::对被屏蔽的同名的全局变量进行访问。文章来源地址https://www.toymoban.com/news/detail-472725.html

到了这里,关于C++11 使用using定义别名(替代typedef)::作用域运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter中使用Overlay传入context提示:Null check operator used on a null value(对空值使用空检查运算符)

    首先此时使用的是GetX框架,框架截图如下: View中代码如下: logic代码 对Overlay的使用封装了一个单独的类PopToastManager(),PopToastManager()代码如下: 运行结果如下:  根据打印的语句可以得知,代码根本没有开始构建OverlayEntry(builder:(context){}) 查看错误,发现问题出现在对

    2024年02月03日
    浏览(41)
  • typedef重复定义解决方法

    如果头文件sm_system.h和math.h中均包含\\\"typedef xxxx float_t\\\"语句,那么使用如下的头文件包含方法:

    2024年02月13日
    浏览(28)
  • 【C++】C++中那些有点意思,但一般也用不到的替代运算符

    所谓替代运算符无非就是用其他字符或者符号代表一些预定义的运算符和符号 有如下代码 如果用替代用算符表示的话 就是这样,花括号可以替换成了为% %,无非就是换了一个表示方法 在C++到20可以使用的代用符如下 符号 替换符 and = and_eq bitand | bitor ~ compl ! not != not_eq || or |

    2024年02月07日
    浏览(40)
  • C语言【自定义数据类型、typedef、动态内存分配】

    一、自定义数据类型。 ​ 关于下面讲到的所有自定义数据类型(enum、struct、union),有一点要说的是:定义类型不是声明变量,做这步操作时不分配内存,也不能在定义类型时赋值(枚举那个不是赋值,是做一个限定,赋值时赋限定之外的值也不报错。)。 1、typedef (给类

    2024年02月05日
    浏览(47)
  • MySQL--最基本的SELECT...FROM语句,列的别名,去除重复行,空值参与运算,着重号,运算符,显示表的结构,过滤数据,显示表的结构,逻辑运算符, LIKE运算符,REGEXP运算符

    方式一 source 文件的全路径名`countries` 方式二 基于具体的图形化界面的工具可以导入数据 比如:选择 “工具” --- “执行sql 脚本” --选中xxx.sql即可 1.1.最基本的语句select 字段1,字段2 ,.............from 表名 用DUAL维持整个结构的平衡 1.2.表中所有等等字段(或列) 其中,不同

    2024年02月04日
    浏览(50)
  • 《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas

    《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas Pandas uses the following operators that can be applied to a whole series. While Python would require a loop to iterate through every element in a list or dictionary, Pandas takes advantage of the feature of vectorization implemented in NumPy that

    2024年01月23日
    浏览(50)
  • Java运算符作用及解析

    Java运算符是对变量或者常量进行操作的符号。以下是Java中常见运算符的解析: 赋值运算符:如“=”,将右侧的值赋给左侧的变量。 一元运算符:如“+”“-”“!”,用于对变量进行操作。 算术运算符:如“+”“-”“*”“/”“%”,用于执行基本的数学运算。 比较运算符

    2024年01月18日
    浏览(42)
  • python中@运算符和*运算符在矩阵乘法中的区别与作用

      我们在看python程序时,经常可以看到@运算符和*运算符,其中@运算符在传统python中通常是作为装饰器使用的。但是在Python 3.5之后,它又具备了矩阵乘法运算的功能。下面使用示例来对比这两个运算符对矩阵运算的影响:   导入用到numpy包:   创建一个维度为2×3×3的

    2024年02月12日
    浏览(47)
  • Golang自定义类型与类型别名

    type myInt int32 与 type myInt = int32 ,概念并不相同 自定义类型: type myInt int32 通过这种方式定义的类型是一个 全新的类型 ,这个新类型与 int32 有相同的底层结构,但是却与 int32 类型不兼容。 尽管 myInt 的底层类型是 int32 ,但它们在类型系统中是不同的。 类型别名: type myInt

    2024年02月13日
    浏览(42)
  • 管道在Vue和Angular中的作用及React的替代方案

    本文主要讲解管道在Vue和Angular中有哪些作用以及React对于管道概念的替代方案是什么。 计算机中的Pipline(管道)常被认为起源于Unix,最初Mcllroy发现很多时候人们会将shell命令的输出传递给另一个shell命令,类似于管道。所以就提出了管道的概念。并在1973年实现了这个管道概

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包