首页 > 编程语言 >C++ constexpr

C++ constexpr

时间:2024-02-22 12:22:18浏览次数:25  
标签:... 常量 C++ constexpr 编译器 Println

C++ constexpr

比如我有一个函数,返回10

int get10()
{
  return 10;
}

我想拿去初始化数组大小

int arraynum[get10()];

编译器会报错,因为会说只能用常量去初始化,所以我们可以用constexpr,把函数改成常量表达式,这样编译器在编译阶段就知道了常量。
再比如一个可变参函数模板,我想递归去使用参数,当参数个数为0的时候结束递归

template<typename T,typename ... U>
void Println(T t,U... u)
{
	if (sizeof...(U)==0) //错误
	cout<<t<<endl;
	else
	{
	cout<<t<<endl;
	Println(u...);
	}
}

因为编译器在编译阶段不知道有Println(T t);这个函数,这个只有在运气阶段才知道,所以会报错。
我们也可以修改成常量表达式让编译器在编译阶段就可以运行这个表达式。

template<typename T,typename ... U>
void Println(T t,U... u)
{
	if constexpr(sizeof...(U)==0) //错误
	cout<<t<<endl;
	else
	{
	cout<<t<<endl;
	Println(u...);
	}
}

标签:...,常量,C++,constexpr,编译器,Println
From: https://www.cnblogs.com/AndreaDO/p/18027056

相关文章

  • C++ STL 容器-string类型
    C++STL第一部分-容器STL的介绍C++的STL分为六大部分容器分为String容器例子1std::stringstr1,str2,str3,str4;str1.assign("abcd");//给str1赋值abcdstr2.assign("abcd",3);//获取abcd中的3个,从0到2str3.assign(str1);//获取str1//注意str3()和str3.a......
  • C++ 第二节课 结构体, 字符串 和 C语言的区分
    1#include<iostream>23usingnamespacestd;456//结构体7structStu{8stringname;9intage;1011//结构体重的函数叫做成员函数在C中是不能直接写函数的只能使用函数指针,通过指针的回调出发函数(行为)12//默认的修饰符......
  • 4.3 提升题 - A One Way In, Two Ways OutC++
    就是让你判断输入受限的双端队列的输出的正确性。其实就是模拟双端队列出队的过程,要不左边出队,要不右边出队,而入队已经一定了。用一个数组模拟输入受限的双端队列就行了。但是写这题可太难受了,写了我大概2个半小时,各种各种小错误,没考虑周全的地方。#include<iostream>using......
  • C++内存管理
    C++内存管理目录C++内存管理内存模型堆与栈的区别其他说明new和deletemalloc/free和new/delete区别new运算符的原理new/delete的使用要点判断内存申请成功delete与delete[]区别参考资料内存模型内存类型作用生命周期常量存储区存放常量,不允许修改全局/静态存储......
  • C++智能指针
    C++智能指针目录C++智能指针unique_ptr简单示例构造方法释放和重置shared_ptr构造方法常用函数构造重置和析构获得原始指针注意事项weak_ptr构造方法常用函数解决循环引用参考资料在C++中,内存的分配和释放都是由开发者手动实现的。这种方式虽然很灵活,但也十分容易出错,比如忘记释......
  • C++ 第一节课 名字空间 ,输入输出函数,和 C 语言的区别
    #include<iostream>//#include头文件,C++标准库的头文件都不带.h(.h是C库头文件添加的)#include<cstdio>#include<cstring>usingnamespacestd;//namespace命名空间为了防止变量名字冲突//命名空间中定义自己的变量或函数或类,都是独立的//所有的命名空......
  • 49. 字母异位词分组c++
    刷力扣还有点不太习惯,主要是C++只学了皮毛。看了官方活用map就是好啊。把字母都排好序然后判断就好了。map<string,vector<string>>m;for(inti=0;i<strs.size();i++){stringtem=strs[i];sort(tem.begin(),tem.end());......
  • 【C++】编写一个具有老式风格接口的函数,其原型如下:int reduce(long arr[], int n)。实
    #include<iostream>#include<string>usingnamespacestd;intreduce(longarr[],intn){sort(arr,arr+n);autostr=unique(arr,arr+n);returnstr-arr;}intmain(){longarr[10]={15,8,5,6,11,11,6,6,198,50};......
  • c++类开发的第三篇(讲明白友元函数和this指针)
    friend_function成员变量和函数的存储c++实现了封装,数据和处理数据的操作(函数)是分开存储的。c++中的非静态数据成员直接内含在类对象中,就像c语言的struct一样。成员函数并不会出现在对象中,而是作为类的一部分存储在代码段中,需要通过对象或对象指针进行调用。成员函数可......
  • C++开发基础知识(修改)
    2024-01-0820:13星期一博客内容来自相关书籍和网站内容总结,仅供个人参考使用:笔者@StuBoo使用目录快速转到技术面试问题汇总、算法笔记1.C++语言基础1.1语言特性面向对象编程(OOP):C++支持面向对象编程,包括封装、继承和多态。通过类和对象,可以将数据和方法组织成单个单元,......