专业编程基础技术教程

网站首页 > 基础教程 正文

「C++」define、const、constexpr分别有哪些特点?

ccvgpt 2024-08-08 12:56:28 基础教程 17 ℃

C++中,常见的常量类型定义方法有define、const、constexpr,那么他们分别有什么特点呢?


「C++」define、const、constexpr分别有哪些特点?

时间维度

作用目标

优缺点

范例

define

预编译期:

进行字符串模板的替换

字符串

代码不会进行类型检查

符号丢失、

没有范围、

没有类型

#define MAX_TEST_COUNT 5

const

编译期:

对常量的只读性进行限制。

从而在运行期可以保证常量是只读的,不能改变。

对象/变量

cont修饰的变量也不能保证一定不会被修改。

const int i_g_count = 10;

const string s_g = "abcd";

const char * const p_c_g_str = "bdef";

constexpr

编译期:

对常量的只读性进行限制。

在编译期就把结果计算出来并进行替换了。

函数内部定义时,是运行期把结果计算并赋值)。

对象/变量

简化模板元编程,使得模板元编程变得合理且可接受的。

constexpr int i_g_count = 10;


注意:cont修饰的变量也不能保证一定不会被修改

比如string和char *变量,可以通过强制对字符数组某个元素进行修改

//先去const属性再引用,然后修改。

void test()
{
    //范例1
    const string name = "abcd";
    string& str = const_cast<string&>(name);
    str[0] = 'x';
    cout << str << endl;//输出xbcd

      //范例2
    string str_new = "xyz";
    const char* temp = str_new.c_str();
    char* str2 = (char*) temp;
    str2[0] = 'm';
    cout << str2 << endl;//输出myz
}




原创不易,欢迎关注、转发、点赞、收藏!

Tags:

最近发表
标签列表