C++11:关键字

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

目录

1、noexcept:用于指定函数不会抛出异常

2、deleted functions:该函数被明确地标记为已删除

3、constexpr:表示可以在编译时求值的常量表达式函数或变量

4、 decltyp:用于推断表达式类型

5、nullptr:表示空指针常量

6、static_assert:用于在编译时进行断言

7、auto:用于自动推断变量类型

8、override:用于重写父类虚函数

9、 final:用于禁止类被继承或虚函数被重写

10、thread_local:用于声明线程局部变量

11、alignas:用于指定变量或类型的对齐方式


1、noexcept:用于指定函数不会抛出异常

        是一个 C++11 关键字,用于指示函数是否可能抛出异常。如果在函数声明或定义中使用了 noexcept 关键字,则表示该函数不会抛出任何异常。如果函数在运行时抛出了异常,则会导致程序直接终止,而不会调用异常处理程序。使用 noexcept 关键字可以提高代码的可靠性和效率。

void foo() noexcept 
{
    std::cout << "This function is noexcept\n";
}

2、deleted functions:该函数被明确地标记为已删除

C++11中的deleted functions是指通过在函数声明中,用语法= delete;来将函数定义为"已删除",来明确禁止编译器生成该函数的定义,任何使用"已删除"函数的代码都会产生编译错误。

这可以用于防止某些不希望发生的情况发生,例如禁止对象进行拷贝或移动。 

class MyClass
{
public:
    void Test() = delete;
};

MyClass value;
value.Test();  // 编译错误:attempting to reference a deleted function

3、constexpr:表示可以在编译时求值的常量表达式函数或变量

constexpr 是 C++11 引入的一个关键字,它用于表示一个表达式或函数可以在编译时求值,而不是在运行时求值。使用 constexpr 可以使编译器在编译时对代码进行优化,从而提高程序的性能。

constexpr 可以用于变量声明、函数声明和类中的成员函数声明。对于变量声明,constexpr 表示该变量的值可以在编译时确定;对于函数声明,constexpr 表示该函数可以在编译时求值,并且返回值可以用于常量表达式;对于类中的成员函数声明,constexpr 表示该函数可以在编译时求值,并且可以用于常量表达式。

使用 constexpr 时需要注意以下几点:

1. constexpr 只能用于常量表达式,也就是在编译时可以确定值的表达式。

2. constexpr 变量必须在声明时进行初始化。

3. constexpr 函数的参数和返回值必须是字面值类型。

4. constexpr 函数的函数体必须是单一返回语句或者赋值语句。

5. constexpr 成员函数必须在类的声明中定义。

总之,constexpr 关键字可以使编译器在编译时对代码进行优化,从而提高程序的性能。

示例:

#include <iostream>

constexpr int square(int x) {
    return x * x;
}

int main() {
    constexpr int num = 5;
    constexpr int result = square(num);
    std::cout << "The square of " << num << " is " << result << std::endl;
    return 0;
}

4、 decltyp:用于推断表达式类型

decltyp是C++11中引入的关键字,用于获取表达式的类型。

#include <iostream>
#include <typeinfo>

int main() {
    auto x = 1 + 2.0; // 自动推导为double类型
    std::cout << "x is of type " << typeid(x).name() << '\n';

    decltype(x) y = 3; // y的类型为double
    std::cout << "y is of type " << typeid(y).name() << '\n';

    return 0;
}

5、nullptr:表示空指针常量

6、static_assert:用于在编译时进行断言

7、auto:用于自动推断变量类型

8、override:用于重写父类虚函数

9、 final:用于禁止类被继承或虚函数被重写

final关键字可以用于类、方法和变量上,其含义如下:

1. final类:不能被继承,即不能有子类。

2. final方法:不能被子类重写,即不能修改方法的实现。

3. final变量:一旦赋值,就不能再修改其值,即成为常量。

使用final关键字的好处:

1. 提高程序的安全性:final类不能被继承,可以防止子类对其进行修改。

2. 提高程序的效率:final方法不能被重写,可以避免动态绑定带来的性能损失。

3. 代码可读性更好:final变量一旦赋值,就不能再修改其值,可以避免对变量值的误操作。

10、thread_local:用于声明线程局部变量

thread_local 是 C++11 引入的关键字,用于声明线程局部变量。

线程局部变量是每个线程独有的变量,每个线程访问的都是自己的变量,互不干扰。使用 thread_local 可以避免多线程中的竞态条件,提高程序效率和安全性。线程局部变量在定义时需要使用 thread_local 关键字进行修饰,例如:

thread_local int count = 0;

这样定义的变量 count 就是线程局部变量了。每个线程都有自己的 count 变量,互不干扰。线程局部变量可以用于多线程编程中的线程同步、线程池等场景。

11、alignas:用于指定变量或类型的对齐方式

alignas关键字用于指定变量或成员的对齐方式,以便在内存中更有效地存储数据。

下面是一个使用alignas关键字的示例:

#include <iostream>
#include <cstdint>

struct alignas(16) MyStruct {
    int16_t a;
    int32_t b;
    int64_t c;
};

int main() {
    std::cout << "sizeof(MyStruct) = " << sizeof(MyStruct) << std::endl;
    std::cout << "alignof(MyStruct) = " << alignof(MyStruct) << std::endl;

    MyStruct s;
    std::cout << "&s = " << &s << std::endl;
    std::cout << "&s.a = " << (void*)&s.a << std::endl;
    std::cout << "&s.b = " << (void*)&s.b << std::endl;
    std::cout << "&s.c = " << (void*)&s.c << std::endl;

    return 0;
}

输出结果:

sizeof(MyStruct) = 16
alignof(MyStruct) = 16
&s = 0x7ffee5b1b9f0
&s.a = 0x7ffee5b1b9f0
&s.b = 0x7ffee5b1b9f4
&s.c = 0x7ffee5b1b9f8

在这个示例中,我们定义了一个结构体MyStruct,并使用alignas(16)指定了它的对齐方式为16字节。结构体中包含3个成员变量,分别为int16_t、int32_t和int64_t类型。在main函数中,我们打印了MyStruct的大小、对齐方式以及每个成员变量的地址。由于我们指定了对齐方式为16字节,所以结构体的大小也是16字节,并且每个成员变量的地址都是16的倍数。文章来源地址https://www.toymoban.com/news/detail-473970.html

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

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

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

相关文章

  • C++ 11 新特性 关键字

    我们先来看一段代码: 在这案例中,我们可以看到,声明为迭代器的变量前缀非常长,这样来写代码非常不美观,也不方便。auto的出现很大程度是为了解决该问题。 现在我们来回答刚才的问题: 在C++中, auto 是一个,它的作用是让编译器自动推导变量的类型,根据变

    2024年02月11日
    浏览(43)
  • 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

    在C语言中,同名函数是不能出现在同一作用域的,但是在C++中却可以,但是要满足函数重载的规则。 那什么是函数重载呢?它的规则是什么呢? 函数重载 :是函数的一种特殊情况,C++允许在 同一作用域 中声明几个功能类似的 同名函数 ,这些同名函数的 形参列表(参数个数

    2024年04月26日
    浏览(55)
  • 哈希表:给定一组查找关键字(32,15,7,11,4,28,56,61,79),哈希表长为m=12,请按照除留余数法设计一个哈希函数,设每个记录的查找概率相等。

    慕课数据结构题目: 给定一组查找(32,15,7,11,4,28,56,61,79),哈希表长为m=12,请按照除留余数法设计一个哈希函数,设每个记录的查找概率相等。 (1)画出按照 线性探测 再散列处理冲突得到的哈希表(给出求解过程),并计算等概率情况下查找成功和查找失败时的平均

    2024年02月11日
    浏览(55)
  • 【C++】C++入门 auto关键字详解(C++11)

    前言 C语言中包括了auto,它可用于定义局部变量。但自从所有的非全局变量的缺省值假定为auto以来,auto就几乎很少使用了。 在C或者以前C++中,auto基本上可以被无视. 但是在C++11中auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器, a

    2024年02月08日
    浏览(50)
  • 前端学习C语言 - 函数和关键字

    本篇主要介绍: 自定义函数 、 宏函数 、 字符串处理函数 和 。 基本用法 实现一个 add() 函数。请看示例: 其中a, b 叫 形参 ,num1, num2 叫 实参 。 Tip :形参和实参的个数不同,笔者编译器报错如下(一个说给函数的参数少,一个说给函数的参数多了): 函数调用过

    2024年02月09日
    浏览(56)
  • 【C++入门】auto关键字(C++11) + 指针空值nullptr(C++11)

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

    2024年02月04日
    浏览(83)
  • 【C++】关键字 & 命名空间 & 输入输出 & 缺省函数

    C++  总计 63 个, C语言 32 个 直接上图:  asm do if return try continue auto double inline short typedef for bool dynamic_cast int signed typeid public break else long sizeof typename throw case enum mutable static union wchar_t catch explicit namespace static_cast unsigned default char export new struct using friend class ext

    2024年02月08日
    浏览(49)
  • 【C++入门】引用、内联函数、auto 关键字

    从语法上理解,引用就是给变量取一个 别名 ,它没有独立空间,和它引用的变量共用一块空间。 例子: 值得注意的是,C++ 中的引用一经初始化,后面是改变不了指向的(这点与Java有所不同),而且引用是必须初始化的。 引用的类型也必须和原变量对应,显然,你肯定不能

    2024年02月16日
    浏览(47)
  • 【C++】引用、内联函数、auto关键字等

    前言:在前面我们讲解了C++入门基础的一些学习例如命名空间、缺省参数、函数重载等。今天我们将进一步的学习,跟着博主的脚步再次往前迈一步吧。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C++学习 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博

    2024年02月20日
    浏览(68)
  • 【C++初阶(三)】引用&内联函数&auto关键字

    目录  前言  1. 引用   1.1 引用的概念   1.2 引用的特性  1.3 引用的权限  1.4 引用的使用  1.5 引用与指针的区别 2. 内联函数 2.1  什么是内联函数 2.2  内联函数的特性  3. auto  3.1 auto简介  3.2 auto使用规则  3.3 auto不能使用的场景 4.  基于范围的for循环  4.1 范围for使用

    2024年02月08日
    浏览(61)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包