首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

常量表达式函数

大家好,又见面了,我是你们的朋友全栈君。 我们可以在函数返回类型前加入关键字constexpr来使其成为常量表达式函数,但并非所有的函数都有资格成为常量表达式函数。...事实上,常量表达式函数的要求非常严格,总结如下: 函数体只有单一的return返回语句。 函数必须返回值,不能是void函数。 在使用前必须已有定义。...return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是常量表达式。...而nConstValue要求使用GetConstThree的值,但此值还没有进行编译时计算,所以有问题。 4.return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是常量表达式。...那么其return表达式语句就不能包含运行时才能确定的变量或函数,只有这样,编译器才能在编译时进行常量表达式函数的额值计算。

42310

C++ const常量对象、常量成员函数和常引用

--- — 2 — 常量成员函数 在类的成员函数后面可以加 const 关键字,则该成员函数成为常量成员函数。...这里有两个需要注意的点: 在常量成员函数中不能修改成员变量的值(静态成员变量除外); 也不能调用同类的 非 常量成员函数(静态成员函数除外)。...const Sample obj; obj.value = 100; // 出错,常量对象不可以被修改 obj.func(); // 出错,常量对象上面不能执行 非 常量成员函数...obj.GetValue; // OK,常量对象上可以执行常量成员函数 return 0; } ---- — 3 — 常量成员函数重载 两个成员函数,名字和参数表都一样,但是一个是...成员函数 " << obj2.GetValue() << std::endl; } 执行结果: 常量成员函数 1 普通成员函数 2 ---- — 4 — 常引用 引用前面可以加 const

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...使用 const 关键字 修饰成员函数 , 会将 成员函数 转化为 " 常量成员函数 " ; " 常量成员函数 " 中 操作限制 : 不能修改成员变量 : 不能修改 任何 成员变量 值 , 静态成员变量...与 非静态普通成员变量 都不能修改 ; 不能调用非常量成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常量成员函数 , 以保证不会修改 成员变量 ; " 常量成员函数 " 只能访问 常量成员变量...其它常量成员函数 如果类的 成员变量 不是 常量 , 那么 " 常量成员函数 " 不能访问它们 ; public: int age; // 年龄 int height; // 身高 如果类的...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量 ; class Student { public: void fun

    23020

    C++类的成员函数 | 成员函数

    C++成员函数的性质 在C++中,类的成员函数是函数的一种,它有返回值和函数类型,它与一般函数的区别只是:  属于一个类的成员,出现在类体中。...C++在使用类函数时,要注意调用它的权限以及它的作用域,私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效的数据。 ...一般的做法是将需要被外界调用的成员函数指定为 public,它们是类的对外接口,但应注意,并非要求把所有成员函数都指定为 public。...这种函数的作用是支持其他函数的操作,是类中其他成员的函数,类外用户不能调用这些私有的函数。  类的成员函数是类体中十分重要的部分。...C++类外定义成员函数 上述所讲成员函数是在类体中定义的,在C++中也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。

    1.9K74

    静态成员函数和非静态成员函数的区别?

    一个静态成员函数不与任何对象相联系,故不能对非静态成员进行默认访问。 它们的根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象的指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()的调用,编译像注解的那样进行转换,s的地址作为第一个传递的参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对非静态成员的访问将自动把this参数作为指向当前对象的指针。而当Sc::sfn()被调用时,没有任何对象的地址被传递。因此,当访问非静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系的原因。

    1.9K90

    c++ 常量表达式_c语言所有函数

    大家好,又见面了,我是你们的朋友全栈君。 constexpr修饰函数。 普通函数/类成员函数。 1.函数必须要有返回值,并且return返回的表达式必须是常量表达式。...,在函数体内部是不允许出现非常量表达式以外的操作,因此函数体内部的for循环是一个非法操作。...C++11语法中,constexpr可以修饰模板函数,但由于模板中类型的不确定性,因此模板函数实例化后的函数是否符合常量表达式函数的要求也是不确定的。...如果constexpr修饰的模板函数实例化结果不满足常量表达式函数的要求,则constexpr会被自动忽略,即该函数就等同于一个普通函数。...如果想用直接得到一个常量对象,也可以用constexpr修饰一个构造函数,这样就可以得到一个常量构造函数。 常量构造函数要求: 构造函数的函数体必须为空,并且用初始化列表的方式为各个成员赋值。

    50830

    【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    , 有两种方法 , 一种是使用共有的成员方法访问 , 另一种是在友元函数中访问 ; 常量函数 , 在头文件中函数定义时 , 在方法后面加上 const 关键字 , 这个函数就变成了常量函数 , 该函数中不允许修改类中的成员变量..., 一般获取成员变量值的函数可以定义成常量函数 ; 成员函数声明时可以直接实现 , 可以在类中声明成员函数的位置 , 直接实现该函数 , 这样就不同在 Student.cpp 中实现了 ; Student.h...: //在函数后加上 const , 该函数就变成了常量函数 //常量函数中是不允许修改成员变量的 //函数在声明的时候也可以实现 int getAge()const { return...delete 对象名 进行释放 ; 友元函数 , changeAge(student); 是调用友元函数修改对象的私有成员变量 ; 常量函数 , student->getAge() 调用共有的常量函数..., 获取私有成员变量值 , 注意常量函数中不允许修改成员变量值 , 只允许获取该值 ; 释放内存 , delete student 作用是, 释放使用 new 申请的堆内存中的内存 ; //使用 new

    53120

    类的成员函数总结

    默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。  ...在创建对象时,编译器通过调用构造函数,给对象中的各个成员变量一个合适的初始值。 虽然上述构造函数调用后,随想中已经有一个初始值,但是不能将其称为对对象中成员变量的初始化。...我们如果不写析构函数,那系统自动默认生成的析构函数,不会把开辟的指针处理 默认生成析构函数,行为跟构造类似,内置类型成员不做处理,自定义类型成员会去调用他的析构 三、拷贝构造函数 概念: 我们在创建对象时...总结: 内置类型成员完成值拷贝(Data) 自定义类型成员调用这个成员的拷贝构造(MyQueue) Stack需要自己写拷贝构造,完成深拷贝 顺序表、链表、二叉树等自己创建空间的类,都需要深拷贝 成员函数定义的原则...能定义成const的成员函数都应该定义成const,这样const对象(权限平移)和非const对象(权限缩小)都可以调用 要修改成员变量的成员函数,不能定义const

    6510

    C++中的const成员变量和成员函数

    const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。...需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

    31030

    C++类的静态数据成员和静态成员函数

    静态成员函数 一般都是在静态成员函数中修改静态数据成员,在刚刚的手机类声明中的成员函数: static void change(); 就是静态成员函数。...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意的是,静态成员函数只能访问静态数据成员和静态成员函数,不能访问非静态数据成员,如果要访问非静态数据成员...但是非静态成员函数可以任意地访问静态成员函数和静态数据成员。 那静态成员函数存在的意义是什么?...首先,可能你在做题的时候,题目要求你使用静态成员函数完成任务…… 开个玩笑啦…… 静态成员函数没有this指针,因为它在类创建的时候就存在了,在没有创建类对象的时候就已经存在静态成员函数,而普通函数必须在类对象被创建的时候才能被使用...简而言之,静态成员函数是服务于类的,而不是某个类对象,它的方便在于不需要定义类对象就能使用。

    19230

    C++11 利用const_cast和type_traits修改类成员常量的通用模板函数

    我们可以把上面的代码写成一个通用的模板函数。。。。以后只要调用模板函数就成了,就可以把代码简化为1行。...(c,5ULL);//调用模板函数将常量c的值修改为5, //注意size_t 在64位系统下定义为unsigned long long,所以这里的参数5必须有类型限定后缀ULL才能与第一个参数的基本类型保持一致...modify_const只是在C++语法上实现了修改const修饰的常量,其实只对类成员常量以及非基本类型的局部常量有效,对于函数局部基本类型常量修改是无效的。....get()<<endl; } 类成员常量修改测试 class_A.c=5 局部基本类型常量修改测试 c=21 局部指针常量修改测试 *p_c=5 局部unique_ptr类常量修改测试...对于全局常量或类的静态常量成员,因为位于程序的常量存储区,受CPU指令级的内存保护(只读),所以是不能被修改的,虽然修改全局常量或类成员静态常量的代码也能编译通过,但实际运行时会抛出内存访问冲突的异常。

    54340

    Dart 中的命名构造函数和常量构造函数

    2.3 常量构造函数的使用场景 常量构造函数通常用于以下场景: 不变的对象:当你知道某些对象的状态在创建后不会变化时,可以使用常量构造函数。...必须是常量表达式:常量构造函数只能接受常量表达式作为参数。...const square2 = Square(5 * 2); // 正常:常量表达式(编译时可以计算) // 以下代码是错误的,因为 `sideLength` 不能是运行时值 // var...`length` 不是常量表达式 } 在这个例子中,Square 的常量构造函数只能接受编译时常量(例如 5 或 5 * 2)。...常量构造函数的对象被缓存,多个相同的常量对象会共享一个实例,从而节省内存和提高性能。 常量构造函数的参数必须是常量表达式,且对象的字段必须是 final。

    15510

    static修饰的成员变量及函数

    static成员变量又称为静态成员变量,在多个对象间共享使用,并且static静态变量在初始化时必须在类外初始化,可以直接通过“类名::变量”访问,哪怕是还没有生成对象时一样可以访问,以此看来static...成员变量不隶属于某个对象,而隶属于类,只是所有该类的对象都可以使用而已。...另外,静态的成员函数不在于多个对象之间的信息共享,而是在于管理类内的static数据成员,完成对static数据成员的封装。...CStatic { public: CStatic(int l, int w) { length = l; width = w; } static void set_height() { // 静态函数操作静态成员...,静态函数没有this指针 height = 20; } int show_box() { return length * width * height; } private: int length;

    17130

    常量表达式概念与用处的关系_常量和变量有什么异同点

    大家好,又见面了,我是你们的朋友全栈君。 1)什么叫常量表达式? 在编译期间进行求值的表达式。...1、字面值常量是常量表达式; 如123,‘a’,3.14等 2、跟字面值常量相关的一些表达式; 如123+3.14,2<<2等 3、在 C++中用常量表达式初始化的const...对象也是常量表达式,并且也是C++推荐的使用方式,而C语言不是。...如int const a=5;语句中a就是常量表达式 2)什么地方会用到常量表达式? 就目前所知道的有三个,后面如果发现再新增。...2、case标签必须具有唯一的值,所以必须用常量表达式; 3、定义一个数组,数组长度必须在编译时确定,必须为一个常量表达式 ps:为了便于维护,常使用#define为数值定义一个符号

    62340
    领券