问个基本问题。inline T const& max0(T const& a,T const& b)

ht_qq0609 2009-02-01 11:23:36
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a<b?b:a;
}
1.为什么用inline?
2.为什么返回值用const&修饰呢,难道希望不改变返回值吗?
...全文
866 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sagegz 2009-02-01
  • 打赏
  • 举报
回复
用了const说明你的参数在函数内是不经过修改的,如果修改了,则编译时会报错.
而使用(&)传址方式来进行参数的传递,可以不需要开辟一块程序栈,
使用引用来进行返回,因为你的参数用的是常引用,故使用常引用将其返回.
对引用的操作可以看成是间接对其对象的操作.
naturemickey 2009-02-01
  • 打赏
  • 举报
回复 2
补充:
如果不加const则无法引用const成员,所以加const不是为了不改变它,而是不得不加。
如果不用&则会增加堆栈段的内存开销。

const是编译期机制,所有的编译期机制都只是为了帮助你尽量快的写出Bug尽量少的代码,而不是在运行期限制你的功能。
举个例子说:如果C++中没有const,那么你就无法实现这个函数了么?一个变量,只要我们初使化之后,永远不去改变它,那它不就是常量了么?const只是为了防止你写错代码而已。
yuwei2589 2009-02-01
  • 打赏
  • 举报
回复
主要因为你的函数都是采用引用的方式来传递参数,而且参数被const修饰了。
函数返回的是a和b中的一个引用,自然而然要被const修饰。

ht_qq0609 2009-02-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 anglecloudy 的回复:]
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a <b?b:a;
}
1.为什么用inline? 简单点,调用函数直接展开,和#define差不多,速度快
2.为什么返回值用const&修饰呢,难道希望不改变返回值吗?肯定不希望,你这个函数的目的只是为了取得最大值
[/Quote]
inline明白了,const&还是有点不明白,比如:
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a <b?b:a;
}
main()
{
...
int x=1,y=2,z=0;
z = max0(x,y);
...
}
进入函数后a和b的地址与x,y的地址相同,并且a和b的值不能改变,这是const&的作用。
可是返回值的呢,怎么理解。
OenAuth.Core 2009-02-01
  • 打赏
  • 举报
回复
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a <b?b:a;
}
1.为什么用inline? 简单点,调用函数直接展开,和#define差不多,速度快
2.为什么返回值用const&修饰呢,难道希望不改变返回值吗?肯定不希望,你这个函数的目的只是为了取得最大值
dreamcs 2009-02-01
  • 打赏
  • 举报
回复
因为max只有一行代码.使用内联后,max函数会在在使用max函数的地方直接展开,省用了调用函数的开销.
xiaoyisnail 2009-02-01
  • 打赏
  • 举报
回复
1.内联没有函数调用的开销,效率高,适用于代码少,运行时间短的函数
2.这个看设计了
waizqfor 2009-02-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lann64 的回复:]
引用 3 楼 ht_qq0609 的回复:
inline明白了,const&还是有点不明白,比如:
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a <b?b:a;
}
main()
{
...
int x=1,y=2,z=0;
z = max0(x,y);
...
}
进入函数后a和b的地址与x,y的地址相同,并且a和b的值不能改变,这是const&的作用。
可是返回值的呢,怎么理解。

你这里有两个原因,1,返回值是a或者b,而a和b都是con…
[/Quote]
UP
ht_qq0609 2009-02-01
  • 打赏
  • 举报
回复
谢谢各位,马上结贴
fancy_zhh 2009-02-01
  • 打赏
  • 举报
回复
1。 使用inline能提高效率,另外对于模板也是在编译时起作用
2。 使用const肯定时为了不让修改
lann64 2009-02-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ht_qq0609 的回复:]
inline明白了,const&还是有点不明白,比如:
template <typename T>
inline T const& max0(T const& a,T const& b)
{
return a <b?b:a;
}
main()
{
...
int x=1,y=2,z=0;
z = max0(x,y);
...
}
进入函数后a和b的地址与x,y的地址相同,并且a和b的值不能改变,这是const&的作用。
可是返回值的呢,怎么理解。
[/Quote]
你这里有两个原因,1,返回值是a或者b,而a和b都是const的,不能直接把const的变量转变成非const的来返回。
2,虽然可以用const_cast来取消a和b参数的const属性,但这样一来返回值就可以用来做左值,从而写出奇怪的代码,这也是不想看到的结果。
例如,返回值不用const,你可以写出如下的代码。
template <typename T>
inline T& max0(T const& a,T const& b)
{
return a <b?const_cast<T&>(b):const_cast<T&>(a);
}
int main()
{
//...
int x=1,y=2,z=0;
z = max0(x,y);
max0(x,y)=100;
//...
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧