栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++14新特性

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++14新特性

auto返回值推导
  • 在C++14中,auto可以对返回值进行推导,而C++11中,需要后置返回值,例如:
auto func(int a, int b)
{
	return a + b;
}//返回值推导为int类型 C++14
auto func(int a, int b) ->int
{
	return a + b;
}//C++11
  • 当多个return语句时,需要保证返回值为同一类型
泛型lambda
  • C++14中,lambda支持对参数的类型推导,类似于模版,而C++11中需要指定参数类型,例如:
auto fn = [](auto a, auto b)
{
	return a + b;
}//返回值推导为int类型 C++14
auto fn = [](int a, int b)
{
	return a + b;
}//C++11
  • 新增了捕获列表初始化,仅拷贝捕获,例如:
int a = 10;
auto fn = [a = a * 10]{ return a; }//函数体内部的a=100
变量模板
  • C++14中新增了变量模板,需注意的是,变量模版仅支持基础数据类型的实体,例如:
template
T a = T(100)
template
T func(T b)
{
	return a * b;
}
func(10);//返回值:1000
func(3.1415926);//返回值:314.15926
constexpr函数
  • C++14里对constexpr函数放松了条件,在C++11中
    被修饰的函数必须有返回值,只能有一条单一的返回语句
constexpr int func(int a)
{
	return a * 10;
}//C++11
constexpr int fucn(int a)
{
	int b = 0;
	for(int i = 0; i < a; ++i)
		b *= i;
	return b;
}//C++14
[[deprecated]]标记
  • C++14中可以通过添加deprecated标记表示当前函数、类、结构体可能会被废弃,例如:
[[deprecated]]
void func() {}
class [[deprecated]] test {};
struct [[deprecated]] test {};
  • 当需要添加提醒信息时,可在关键字后加入[[deprecated("warning msg")]]
二进制字面量和数位分隔符

cout<< 0b1000'0000< cout << 0x0000'00FF << endl; // 255
cout << 3.14'15926< cout << 100'000'000< 新增标准库 std::make_unique

  • auto uniptr = std::make_unique(1);
std::shared_timed_mutex & std::shared_lock & std::unique_lock
  • C++14中通过std::shared_timed_mutex和std::shared_lock实现读写锁, 读std::shared_lock,写std::unique_lock
struct TestThread
{
    mutable std::shared_timed_mutex mutex_;
    int val;

    TestThread() 
    {
        val= 0;
    }

    int get() const 
    {
        std::shared_lock lock(mutex_);
        return val;
    }

    void increase() 
    {
        std::unique_lock lock(mutex_);
        val += 1;
    }
};
std::integer_sequence
  • 表示整数的编译时序列,例如:
template
void cout_sequence(std::integer_sequence int_seq)
{
    std::cout << "The sequence of size " << int_seq.size() << ": ";
    //((std::cout << ints), ...); //C++17
    for(auto& i : {ints...})
    {
    	cout << i;
    }
    std::cout << 'n';
}

int main() 
{
    // size 7: 9 2 5 1 9 1 6
    cout_sequence(std::integer_sequence{});
    cout_sequence(std::index_sequence<9, 2, 5, 1, 9, 1, 6>());
    // size 7: 0 1 2 3 4 5 6
    cout_sequence(std::make_integer_sequence());
    cout_sequence(std::make_index_sequence<7>());
    // size 5: 0 1 2 3 4
    cout_sequence(std::index_sequence_for());
    return 0;
}
std::exchange
  • 作用为将参数2的值给予参数1然后返回改变之前参数1的值,例如:
std::vector vec1{1, 2, 3, 4};
std::vector vec2{5, 6, 7, 8};
auto vec3 = std::exchange(vec1, vec2);
结果:vec1 = vec2 = {5, 6, 7, 8};
     vec3 = {1, 2, 3, 4};
std::quoted
  • 作用仅为给字符串添加双引号,例如:
std::string str = "hello world";
std::cout << str << std::endl;//hello world
std::cout << std::quoted(str) << std::endl;//"hello world"
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864220.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号