C++中const修饰的函数引用参数与普通函数引用参数是否等效
问题1 两个版本的参数是否等价
是完全等价的,此处给函数引用添加的const限定符没有任何实际作用,会被编译器直接忽略。
你可以通过标准库的类型萃取工具直接验证:
#include <type_traits> int anotherFunc(); // 以下两个断言都会编译通过 static_assert(std::is_same_v<decltype(anotherFunc) const, decltype(anotherFunc)>>); static_assert(std::is_same_v<decltype(anotherFunc) const&, decltype(anotherFunc)&>>);
这一结论和你观察到的汇编输出结果完全吻合。
问题2 对应的C++标准条款
该行为由C++标准的 [dcl.fct] 章节明确规定:
任何附加在函数类型上的cv限定符(const/volatile)都会被忽略。
C++本身不存在const修饰的函数类型,cv限定符仅对类的非静态成员函数有意义(用来限定成员函数调用时的this指针类型),对自由函数、函数指针、函数引用的基础函数类型附加const都是无效操作。
内容的提问来源于stack exchange,提问作者Anoop Rana
相关产品推荐
相关产品推荐

