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

如果成员函数调用破坏"constness"的函数,它仍然是const吗?

在C++中,const成员函数是指那些不会修改对象状态的成员函数。它们通常用于保证对象的状态不会被意外地修改。当成员函数被声明为const时,它不能修改对象的非静态数据成员,也不能调用非const成员函数。

如果成员函数调用了一个破坏"constness"的函数,那么这个函数就不是const的。在这种情况下,编译器会报错,因为const成员函数不能调用非const成员函数。为了避免这个问题,可以将被调用的函数也声明为const,或者在调用它之前将对象转换为非const引用。

总之,如果成员函数调用破坏"constness"的函数,那么它仍然是const的,只要它本身是const的。但是,如果被调用的函数也是const的,那么这个调用就是合法的。

相关搜索:Python的map函数可以调用对象成员函数吗?浅拷贝调用成员对象的构造函数吗?如果成员函数影响逻辑状态,而不是按位状态,那么它们应该是"const"吗?有人能用延迟‘显式运算符const GUID_t&() const’来解释成员函数的功能吗?如果类没有任何成员变量,那么通过临时对象调用类的成员函数的开销是多少?函数可以从上一次调用中访问它的变量吗?Python:如果在函数中声明了一个变量,我可以在下次调用函数时访问它的值吗?如果调用perl中的函数时不带全参数,可以吗?如果你调用一个函数,它返回一个箭头函数,作为你的一个组件的属性,返回的箭头函数会被重新绑定吗?c++在静态/全局对象的构造函数被调用之前访问它的成员是否有效?在尚未完全构造的对象上从不同的线程调用成员函数合法吗?有人能帮我解决这个问题吗?未捕获的错误:对成员函数的调用存在()文件生成器-如何跳过文件上传字段,如果它是空的。“调用成员函数guessExtension() on null”错误C++如果我写了一个函数模板,并且没有请求它的任何实例化,会从它生成任何模板函数吗?在这种情况下,工会成员会调用他们自己的析构函数吗?如果对象是用模板创建的,那么调用构造函数是不可能的吗?当一个对象被传递给成员函数时,它的行为会发生变化吗?如果用` `freeWhenDone:false` `初始化,数据的“复制构造函数”会复制它引用的字节吗?一个函数可以在它的定义中使用不同的参数调用自己吗?如果其他线程没有调用await(),那么Thread中的一些子类可以调用条件的函数信号()吗?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

const成员函数一定是线程安全

)) { //非成员函数 cbegin并没有调用成员函数版本 cbegin 是不是吃了一惊?.../** 如果C对应一个传统容器型别 std::vector则container就是该型别的引用到 const 版本,const std::vector&,调用 C++11 提供成员函数版本 begin...2,调用 constexpr函数时,如传入值有一个或多个在编译期未知,则运作方式和普通函数无异,它也是在运行期执行结果计算。...*/ //pow是个 constexpr函数,且不会抛出异常 //constexpr并不是表面 pow要返回一个const值,表明如果 base和exp是编译期常量,pow返回结果就可以当一个编译期常量使用...//宗旨:多个线程同时调用带有 const成员函数,如何保证线程安全性 //const成员函数就一定是线程安全

1.1K20
  • C++核心准则Con.2:默认情况下,将成员函数定义为const类型

    只要没有修改对象可观察状态,就应该将成员函数定义为const类型。这是设计意图更清晰表达,可以带来更好可读性,方便编译器捕捉更多错误,而且有时还会带来更多优化机会。...传递指针或者引用给非常量也不是说一定不好,但是只应该发生在调用一个假定会修改对象值情况下。代码读者必须假设接受原始T*或T&参数函数会修改(指针或引用,译者注)参照对象。...类型成员函数可以通过mutable对象或者借助指针成员修改对象值。...说明这件事另一个方式是常量属性是不可传递。一个const成员函数修改mutable成员值,或者通过一个非const指针访问对象值都是可能。...如果一个函数没有定义为const类型,有没有执行针对任何成员变量非常量操作,标记

    71820

    多才多艺const

    const函数不可修改类对象数据 } 定义如上成员方法很重要,因为明确地告诉了类使用者,哪些函数可以修改类对象信息,哪些不会修改类对象信息。...像 func() 这样函数const成员方法,只能被常对象调用,以确保不违反权限紧缩原则,比如: text t1; // 普通对象t1 const text t2; // const型对象t2 t1...普通对象不可调用成员方法 t2.func(); // 没毛病 注意,函数本体const属性是可以被视为重载依据,换句话说如果以上类text提供了non-const版本func函数,那么t1将会自动调用...编译器没有智能,只能实现bit-wise意义上约束,下面的例子讨论const成员 operator[ ] 表现可以帮助理解: class text { ... ......,关键我们要掌握内容是:如果我们类对象拥有成员指针,那么一般意义上const成员方法只能保证bits-wise常量性(即保证类对象内部内存信息不被修改),但无法保证所谓 logical-wise

    46530

    C++笔试面试题整理

    如果你试图使用const_cast来完成修改constness 或者volatileness属性之外事情,你类型转换将被拒绝。...const修饰类成员函数函数定义体):任何不需要修改数据成员函数都应该使用const修饰,这样即使不小心修改了数据成员调用了非const成员函数,编译器也会报错。...当const函数中使用到变量被mutable修饰后,在const函数中可以对其进行修改。常函数只能调用类中函数,不能调用非常函数。 C语言volatile含义是什么。...如果其它对象可以获得该属性非常量引用(或指针),那么对该属性单纯赋值就会破坏业务规则完整性。...体现是一个纵向概念,也即在基类和派生类间实现。 delete与delete[]区别: delete只会调用一次析构函数,而delete[]会调用每一个成员析构函数。 继承优缺点。

    2.6K40

    C++从入门到精通——const与取地址重载

    如果一个成员函数没有被声明为const,则默认是一个非const成员函数。非const成员函数可以修改对象成员变量,因此不能被const对象调用。...如果一个成员函数需要被const对象调用,应该在函数声明末尾加上const关键字。这样声明成员函数被称为const成员函数保证不修改对象状态,并且可以被const对象调用。...const成员函数内可以调用其它const成员函数const成员函数内部,只能调用其他const成员函数。...const成员函数内可以调用其它const成员函数const成员函数可以调用其他const成员函数。...因为非const成员函数可以修改对象状态,包括调用const成员函数不会破坏对象const属性。

    15510

    闭关多日,整理一份C++中那些重要又容易忽视细节

    应有选择使用内联函数,因为节省下来时间确实是少得可怜,如果说执行函数代码时间比函数调用机制时间长,那用内联函数就没什么意思。...一个函数可以是多个类友元函数,只需要在各个类中分别声明。 友元函数调用与一般函数调用方式和原理一致。 友元函数虽然不是类成员却能够访问类所有成员函数。类授予友元特别的访问权。...至于它是否破坏了类封装性,这个不同的人有不同说法啦,认为没有破坏封装性的人觉得只有类声明可以控制哪些函数可以访问内部数据。...非成员函数可以访问类中公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏特性。...友元作用在于提高程序运行效率,但是,破坏了类封装性和隐藏性,使得非成员函数可以访问类私有成员。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。

    59310

    Effective C++: 改善程序与设计55个具体做法

    const可被施加于任何作用域内对象、函数参数、函数返回类型、成员函数本体。...■ 当 const和non-const成员函数有着实质等价实现时,令non-const版本调用const版本可避免代码重复。...遵守这个条款可增加封装性,帮助 const 成员函数行为像个 const,并将发生“虚吊号码牌”(dangling handles)可能性降至最低。...■ Nothrow new是一个颇为局限工具,因为只适用于内存分配;后继构造函数调用还是可能抛出异常。...条款51:编写new和delete时需固守常规 请记住 ■ operator new应该内含一个无穷循环,并在其中尝试分配内存,如果无法满足内存需求,就该调用new-handler。

    70820

    【C++修行之道】类和对象(五)日期类实现、const成员、取地址及const和取地址操作符重载

    const对象可以调用const成员函数? 非const对象可以调用const成员函数const成员函数主要目的是确保函数不会修改对象状态。...3. const成员函数内可以调用其它const成员函数? 不可以。在const成员函数中,不能直接调用同一个类const成员函数。...原因是const成员函数承诺不会修改对象状态,而如果调用了非const成员函数,就会违背这个承诺,因为非const成员函数可能会修改对象。...然而,有一种情况可以间接调用const成员函数,那就是如果你将对象const性质通过const_cast去除,然后调用const成员函数。...总结来说,const成员函数内不能直接调用const成员函数,以保持const成员函数承诺不修改对象状态。 4. 非const成员函数内可以调用其它const成员函数

    9710

    如何设计一个C++类?

    由不带参数构造函数,或者为所有的形参提供默认实参构造函数定义。如果定义某个类变量时没有提供初始化时就会使用默认构造函数。...这里需要知道成员函数使用const修饰代表什么意思,代表在此函数内不能修改类数据成员如果const修饰成员函数内修改了成员变量,那编译器会编译失败。...如果你期望在某个成员函数内不更改成员函数,而又没有标记为const,这时自己或者其他人在此函数内改动了某些成员变量,编译器对此没有任何提示,这就有可能产生潜在bug。...tips:const对象上只能调用const成员函数,非const对象上既可以调用const成员函数,也可以调用const成员函数。 什么时候需要加noexcept?...(int等):传值 参数在函数内不会更改,参数类型如果为class类型:传const引用 类声明和实现要分开写到不同文件中

    1.5K20

    剖析【C++】——类和对象(下篇)——超详解——小白篇

    以下成员必须在初始化列表中初始化: 引用类型成员变量 const 成员变量 自定义类型成员变量(如果该类没有默认构造函数) 示例代码: class MyClass { public:...问题解答: 1.静态成员函数可以调用非静态成员函数?...void nonStaticFunc() { cout << "Non-static member function called." << endl; } }; 2.非静态成员函数可以调用静态成员函数...友元 友元提供了一种特殊机制,可以让一个类允许另一个类或函数访问其私有或受保护成员。虽然友元增加了便利性,但也会破坏封装性,增加代码耦合度,因此使用时需谨慎。...友元函数调用与普通函数调用相同。

    7210

    Effective C++笔记

    const可被施加于任何作用域内对象、函数参数、函数返回类型、成员函数本体 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上常量性” 当const和non-const...成员函数有着实质等价实现时,令non-const版本调用const版本可避免代码重复 4.确定对象被使用前已被初始化 为内置型对象进行手工初始化,因为C++不保证初始化它们 构造函数最好使用成员初始值列...通常比复合级别低。但是当派生类需要访问受保护基类成员,或需要重新定义继承而来virtual函数时,这么设计是合理 和复合不同,private继承可以造成empty base最优化。...new是一个颇为局限工具,因为只适用于内存分配;后继构造函数调用还是可能抛出异常 50....编写new和delete时需固守常规 operator new应该内含一个无穷循环,并在其中尝试分配内存,如果无法满足内存需求,就应该调用new-handler。

    81420

    C++奇迹之旅:类和对象const成员&&static关键字&&友元&&内部类

    Date d2(2022, 1, 13); d2.Print(); return 0; } 请思考下面的几个问题: const对象可以调用const成员函数?...const 对象权限被限制了,不能调用可能修改对象状态const 成员函数。这会导致权限放大,编译时会报错。 非const对象可以调用const成员函数? 答:可以。...这是权限放小,因为 const 成员函数权限被限制了。 const成员函数内可以调用其它const成员函数? 答: 不可以。这也是权限放小,因为 const 成员函数权限被限制了。...非const成员函数内可以调用其它const成员函数? 答: 可以。这是权限放小,因为 const 成员函数权限被限制了。...,属于所有对象 【问题】 静态成员函数可以调用非静态成员函数

    12910

    【c++】类和对象(五)赋值运算符重载

    ; } temp是临时对象,因此只能以值方式返回,不能返回引用 2.const成员函数 假如我们现在定义一个const对象,想访问Print函数,我们发现是调用不了: class Date...Date d2(2022,1,13); d2.Print(); } 我们查看结果: 如果没有const修饰函数呢,我Date类型对象能否调用const成员函数呢?...这里是权限缩小 请思考下面的几个问题: const对象可以调用const成员函数?...不可以,权限放大 非const对象可以调用const成员函数? 可以,权限缩小 const成员函数内可以调用其它const成员函数?...不可以,权限放大 非const成员函数内可以调用其它const成员函数

    18810

    【C++】类与对象(下)

    一.const成员const修饰成员函数”称之为const成员函数const修饰类成员函数,实际修饰该成员函数隐含this指针,表明在该成员函数中不能对类任何成员进行修改。...而且对于C++来说用const修饰this指针,普通对象和const对象都能调用;(若普通对象调用函数会产生权限缩小现象产生,这种权限缩小是我们所允许) 而const修饰对象则不可以调用普通函数...静态成员函数和非静态成员函数调用关系 静态成员函数可以调用非静态成员函数?no(无this指针) 非静态成员函数可以调用静态成员函数?...友元函数调用与普通函数调用原理相同。...但是友元会增加耦合度,破坏了封装,所以友元不宜多用。

    11610

    C++强制类型转换操作符 const_cast

    const_cast也是一个强制类型转换操作符。《C++ Primer》中是这样描述: 1.将转换掉表达式const性质。 2.只有使用const_cast才能将const性质性质转化掉。...这就引出了const_cast最常用用法: 如果有一个函数形参是non-const类型变量,而且函数不会对实参值进行改动,这时我们可以使用类型为const变量来调用函数,此时const_cast...如果我们定义了一个非const变量,却使用了一个指向const指针来指向(这不是没事找事嘛),在程序某处我们想改变这个变量值了,但手头只持有指针,这是const_cast就可以用到了: int...在函数参数传递上const_cast作用才显现出来。...I would rather use static cast for the adding constness: static_cast(this).

    29440

    C++基础知识精髓

    const对象 (常对象) const属性对象(如:const Person p),常对象所有的成员变量都是const属性,不能用常对象调用const成员函数(常对象只能调用成员函数) #include...5.什么时候一定要用初始化列表 有const成员变量和引用成员变量时候一定要用初始化列表初始化这两种变量 析构函数 没有返回值,析构函数名称类型前加~ 1.如果是栈对象 作用域结束时候自动调用析构函数...非成员函数能够访问类中公有成员,但是假如将数据成员都定义为公有的,这又破坏了隐藏特性。...public和protected成员变量和成员函数都会被子类继承下来 覆盖: 如果子类中有和父类函数名相同且参数相同成员函数,则在子类对象调用成员函数时会把父类覆盖掉 隐藏: 如果子类中有和父类函数名相同但参数不同成员函数...,在类外也不能访问 // protected保护继承 特点是基类所有公有成员和保护成员都成为派生类保护成员,并且只能被派生类成员函数或友元访问,基类私有成员仍然是私有的 // private私有继承

    2K50

    【C++】类与对象篇四

    静态成员变量一定要在类外进行初始化 静态成员函数特殊特殊调用方式:类名 + :: + 函数名,因为没有this指针,无法通过该类对象调用。...指针,不能访问任何非静态成员 静态成员也是类成员,受public、protected、private 访问限定符限制 【问题】 静态成员函数可以调用非静态成员函数?...非静态成员函数可以调用静态成员函数? 三 . 友元 友元提供了一种突破封装方式,有时提供了便利。但是破坏了封装,所以友元不宜多用。 友元分为:友元函数和友元类 1....友元函数不能用const修饰 3 . 友元函数可以在类定义任何地方声明,不受类访问限定符限制 4 . 一个函数可以是多个类友元函数 5 . 友元函数调用与普通函数调用原理相同 2....内部类 如果一个类定义在另一个类内部,这个内部类就叫做内部类。内部类是一个独立类,它不属于外部类,更不能通过外部类对象去访问内部类成员

    8110

    C++进阶之路:再谈构造函数、static成员、友元(类与对象_下篇)

    静态成员函数没有隐藏this**指针**,不能访问任何非静态成员 静态成员也是类成员,受public、protected、private 访问限定符限制 【问题】 静态成员函数可以调用非静态成员函数...非静态成员函数可以调用静态成员函数? 1. 静态成员函数可以调用非静态成员函数? 不可以。 静态成员函数属于类本身,而非静态成员函数属于类特定实例。...静态成员函数在没有实例化对象情况下就可以被调用没有 this 指针,因此无法访问非静态成员函数或非静态成员变量。只有通过类对象实例才能访问非静态成员函数。...非静态成员函数可以调用静态成员函数? 可以。 非静态成员函数可以直接调用静态成员函数,因为非静态成员函数属于类一个实例,可以访问类静态成员。静态成员函数可以被任何实例或类本身调用。...,但不是类成员函数 友元函数不能用const修饰 友元函数可以在类定义任何地方声明,不受类访问限定符限制 一个函数可以是多个类友元函数 友元函数调用与普通函数调用原理相同 友元类 友元类所有成员函数都可以是另一个类友元函数

    6910

    你知道一个空类里面有什么

    &rh); // 复制构造函数 ~empty(); // 析构函数 empty & operator=(const empty &rg); // 赋值操作符函数 }; 注:如果类...其次,注意到类node中包含引用成员name,以及非静态const成员age,他们之中任一个,都会导致系统拒绝生成默认赋值操作符函数。...因为引用一旦指定了关联目标就再也不能修改。那么, x1 = x2 会让 x1.name指向s1值变为"bb"?...这么一来,那其他跟x1无关但使用了字符串s1对象岂不是要平白无故地遭受牵连? 以上分析,针对类非静态const成员age而言,是一模一样,因为age也不应该通过类对象赋值操作而发生改变。...总而言之,以下情形发生时系统将拒绝生成默认赋值操作函数: 类中含有引用成员 类中含有非静态const成员 类继承自含有private赋值操作符函数基类 诡异是,即便在上述条件下,系统依然会赞同生成默认拷贝构造函数

    89420
    领券