C++ 11 新特性 关键字

这篇具有很好参考价值的文章主要介绍了C++ 11 新特性 关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

auto关键字

1. 什么是auto,auto有什么作用?

我们先来看一段代码:

#include<iostream>
#include<vector>

int main()
{
    using namespace std;
    vector<int>arr={2,4,6,8};
    //遍历arr向量
    for(vector<int>::iterator it=arr.begin();it!=arr.end();it++)
    {
	cout<<*it<<" ";
    }
    cout<<endl;
    return 0;
}

在这案例中,我们可以看到,声明为迭代器的变量前缀非常长,这样来写代码非常不美观,也不方便。auto的出现很大程度是为了解决该问题。

现在我们来回答刚才的问题:

在C++中,auto 是一个关键字,它的作用是让编译器自动推导变量的类型,根据变量的初始化表达式来确定其类型。这个特性从C++11标准开始引入,被广泛用于简化代码和提高代码的可读性,使用auto关键字可以大大提高我们的编码效率。

下面是使用atuo关键字的代码:

#include<iostream>
#include<vector>

int main()
{
    using namespace std;
    vector<int>arr={2,4,6,8};
    //遍历arr向量
    //auto会自动将it转换成赋值变量的类型
    for(auto it=arr.begin();it!=arr.end();it++)
    {
	cout<<*it<<" ";
    }
    cout<<endl;
    return 0;
}

显然,代码变美观和简洁了不少。

2. auto和const

我们先来看一段代码:

int x=0;
const auto n = x;
auto f = n;
const auto & r1=x;
auto r2 = r1;

在第2行代码中,n为const int,auto被推导为int。
在第3行代码中,n为const int类型,但是auto却被推导为int类型,这说明当右边的表达式带有const属性时,auto不会使用const属性,而是直接推导出non-const类型。
第4行代码中,auto被推导为int类型,这个很容易理解,不再赘述。
第5行代码中, r1是const int&类型, auto也被推导为const int类型,这说明当const和引用结合时,auto的推导将保留表达式的const类型。

总结∶

1.当类型不为引用时,auto的推导结果将不保留表达式的const属性;

2.当类型为引用时,auto 的推导结果将保留表达式的const属性。

3. auto的高级用法

auto除了可以独立使用,还可以和某些具体类型混合使用,这样auto表示的就是“半个”类型,而不是完整的类型︰

int x = 0;
auto *pt1 =&x; //pt1为int*, auto推导为int 
auto pt2 = &x; //pt2为int*, auto推导为int*
auto &r1 = x; //r1为int&, auto推导为int
auto r2 = r1; //r2为int, auto推导为int

4. auto的使用限制

在C++11中,

1.auto不能在函数的参数中使用

//错误案例
auto test1(int n)
{
    return n*2;
}

2.auto不能作用于类的非静态成员变量

//错误案例
class test2{
    public:
    auto name;
    auto age;
};

3.auto不能作用于模板参数

#include<iostream>
template<class T>
class Stack{
private:
    std::vector<T> elements;
public:
       void push(T value) {
        elements.push_back(value);
    }
    
    T pop() {
        T value = elements.back();
        elements.pop_back();
        return value;
    }
}

int main()
{
    //错误案例
    Stack<auto>s;  
    s.push(1);
    return 0;
}

4.auto不能用于推导数组类型

#include<iostream>
int main()
{
    int arr[]={2,3,4,6};
    auto auto_arr=arr;    //错误案例
    return 0;
}

当然,上诉的限制是在C++11的情况下,其他版本可能有所变化。文章来源地址https://www.toymoban.com/news/detail-681947.html

到了这里,关于C++ 11 新特性 关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【C++入门】auto关键字(C++11) + 指针空值nullptr(C++11)

    👦个人主页:@Weraphael ✍🏻作者简介:目前学习C++和算法 ✈️专栏:C++航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 本章是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。 随

    2024年02月04日
    浏览(74)
  • 【C++】C 语言 和 C++ 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C++ 语言中常量原理 - 符号表存储常量 )

    【C 语言】const 用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 ) 普通类型数据的常量定义时 , const 在 数据类型 的 左边 和 右边 其作用 是相同的 ; 指针数据的相关常量类型 : const 在 指针符号

    2024年02月11日
    浏览(38)
  • 【C++】: auto关键字(C++11)+基于范围的for循环(C++11)+指针空值nullptr(C++11)

    随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在: 类型难于拼写 含义不明确导致容易出错 std::mapstd::string, std::string::iterator 是一个类型,但是该类型太长了,特别容 易写错。聪明的同学可能已经想到:可以通过typedef给类型取别名,比如: 使用typedef给类

    2024年02月08日
    浏览(34)
  • 【C++】C++11-类的新功能&default&delete&final&override关键字

    一个类有多少个默认成员函数? c++98:6个 C++11:8个 在C++98中,一个类中有如下六个默认成员函数:构造函数,析构函数,拷贝构造函数,拷贝赋值函数,取地址重载函数,const取地址重载函数,其中前四个成员函数最重要.后面两个成员函数一般不会用到 其中这里“默认”的意思就是 你不

    2024年02月02日
    浏览(71)
  • C++之深入解析如何通过extern “C”关键字支持C语言

    C++ 语言的创建初衷是 “a better C”,但是这并不意味着 C++ 中类似 C 语言的全局变量和函数所采用的编译和连接方式与 C 语言完全相同。作为一种欲与 C 兼容的语言, C++ 保留了一部分过程式语言的特点(被称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变

    2024年02月02日
    浏览(32)
  • 【C++基础】auto关键字(C++11)(auto的使用细则;auto不能推导的场景;auto的使用场景;基于范围的for循环)

    在早期C/C++( C++98 )中auto的含义是:使用auto修饰的变量,是具有 自动存储器的局部变量 ,但遗憾的是一直没有人去使用它。因为在函数内定义的变量默认就是局部变量。 C++11 中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的 类型指示

    2023年04月13日
    浏览(37)
  • C++11:关键字

    目录 1、noexcept:用于指定函数不会抛出异常 2、deleted functions:该函数被明确地标记为已删除 3、constexpr:表示可以在编译时求值的常量表达式函数或变量 4、 decltyp:用于推断表达式类型 5、nullptr:表示空指针常量 6、static_assert:用于在编译时进行断言 7、auto:用于自动推断

    2024年02月08日
    浏览(26)
  • C++11关键字

    根据表达式的类型自动推导类型     C++中的链接性分为外部,内部,作用域为整个文件的变量。还有无链接性的局部变量 使一个变量声明为全局变量,仅在当前文件可见,外部文件不可以使用。 static放在函数中,导致局部变量存储为静态 ,当前文件函数外部不可访问。 s

    2024年02月11日
    浏览(26)
  • 计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

    三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 目录: 前言: 本片博客是以学习过C语言之后进入C++学习为前提,讲解C++入门级知识,为C++之后的学习做铺垫 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀-正文开始-❀–❀–❀–❀–❀

    2024年04月11日
    浏览(113)
  • C++ : auto关键字

            前提引入:                 1.类型名,在绝大多数编程时,我们都会引入类型来定义一个我们需要的数据。                 类型众多,偶尔我们会遇见一串类型名,使用起来无比复杂。存在拼写错误,含义不明确导致出错的问题。                 列如:      

    2023年04月11日
    浏览(80)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包