C++11:基于范围的for循环、静态断言

基于范围的for循环

在C++中for循环可以使用基于范围的for循环,示例代码如下:

    int a[] = { 1, 2, 3, 4, 5 };
    int n = sizeof(a) / sizeof(*a); //元素个数

    for (int i = 0; i < n; ++i)
    {
        int tmp = a[i];
        cout << tmp << ", ";
    }
    cout << endl;

    for (int tmp : a)
    {
        cout << tmp << ", ";
    }
    cout << endl;


    for (int i = 0; i < n; ++i)
    {
        int &tmp = a[i];
        tmp = 2 * tmp;
        cout << tmp << ", ";
    }
    cout << endl;

    for (int &tmp : a)
    {
        tmp = 2 * tmp;
        cout << tmp << ", ";
    }
    cout << endl;

使用基于范围的for循环,其for循环迭代的范围必须是可确定的:

int func(int a[])//形参中数组是指针变量,无法确定元素个数
{
    for(auto e: a) // err, 编译失败
    {
        cout << e;
    }
}

int main()
{
    int a[] = {1, 2, 3, 4, 5};
    func(a);

    return 0;
}

静态断言

C/C++提供了调试工具assert,这是一个宏,用于在运行阶段对断言进行检查,如果条件为真,执行程序,否则调用abort()。

int main()
{
    bool flag = false;

    //如果条件为真,程序正常执行,如果为假,终止程序,提示错误
    assert(flag == true); //#include <cassert>或#include <assert.h>
    cout << "Hello World!" << endl;

    return 0;
}

C++ 11新增了关键字static_assert,可用于在编译阶段对断言进行测试。

静态断言的好处:

  • 更早的报告错误,我们知道构建是早于运行的,更早的错误报告意味着开发成本的降低
  • 减少运行时开销,静态断言是编译期检测的,减少了运行时开销

语法如下:

    static_assert(常量表达式,提示字符串)
    注意:只能是常量表达式,不能是变量
int main()
{
    //该static_assert用来确保编译仅在32位的平台上进行,不支持64位的平台
    static_assert( sizeof(void *)== 4, "64-bit code generation is not supported."); 
    cout << "Hello World!" << endl;

    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11 引入了许多新的特性和改进,以下是全面的列举: 1. 自动类型推导(auto) 2. 统一的初始化语法(花括号初始化) 3. 空指针常量(nullptr) 4. 定义常量表达式(constexpr) 5. 声明和定义分离(extern template) 6. 默认函数删除(= default, = delete) 7. 区间迭代(range-based for loop) 8. 委派构造函数(delegating constructors) 9. 移动语义(移动构造函数和移动赋值运算符) 10. 右值引用(&&) 11. lambda 表达式 12. 显式虚函数覆盖(override 和 final 关键字) 13. 静态断言(static_assert) 14. 可变参数模板(variadic templates) 15. 线程支持库(std::thread, std::mutex, std::condition_variable) 16. 并发容器(std::atomic, std::atomic_flag) 17. 强类型枚举(enum class) 18. 智能指针(std::shared_ptr, std::unique_ptr) 19. 正则表达式库(std::regex) 20. 原始字符串字面量(raw string literals) 21. 显示默认函数和删除函数的特殊情况 22. 基于范围循环 23. 初始化列表 24. 类型推导模板参数 25. 线程局部存储 26. 静态断言 27. 并发编程支持 28. 多线程支持 29. 原子操作支持 30. 静态多线程支持 31. 内存模型支持 32. 标准库改进 33. 随机数库增强 34. 正则表达式库增强 35. 文件系统库(std::filesystem) 36. 时间库改进(std::chrono) 37. 范围库(ranges) 38. 并行算法库(Parallel STL) 39. 字符串视图(std::string_view) 40. 基于属性的编程(attributes-based programming) 41. 基于范围的 for 循环改进 42. 初始化列表扩展 43. 类型推导扩展 44. 右值引用相关扩展 45. 静态断言扩展 46. Unicode 字符串字面量 47. 强制执行函数不抛出异常 48. noexcept 运算符 49. 数组大小为 0 的特殊情况 50. 其他语言特性的引入和改进(例如:常量表达式函数、原始字符串字面量、非静态成员初始化) 这些特性使得 C++11 更加现代化,方便了开发人员进行编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值