[吐槽]误人子弟的半桶水真多

lin5161678 2019-12-24 08:12:16
在一个QQ群 480882345 看到一个问题
引用
(++n) = 10; // 正确
(n++) = 10; // 为什么是错的

一点语法的东西
引用
++n这个表达式结果是 n的引用 是左值所以可以赋值
n++这个表达式结果是右值 所以不可以赋值

我这样回答之后 看到有人说着不对
好奇的问有什么不对
居然回复
引用
和左右值无关
n++结果是const引用所以不能赋值

噗呲 这个人还是管理员
我后面纠正他 他回复不了就把我 T 了
半桶水还自大狂妄的喜欢误人子弟
...全文
2155 106 打赏 收藏 转发到动态 举报
写回复
用AI写文章
106 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2020-01-19
  • 打赏
  • 举报
回复
引用 107 楼 y2016724 的回复:
preincrement
template<class T>
T& operator++()
{
++*this;
return this;
}
postincrement
template<class T>
const T operator++(T x)
{
T temp(x);
++*this;
return temp;
}
另外应该return *this; 而不是 return this;
lin5161678 2020-01-19
  • 打赏
  • 举报
回复
引用 107 楼 y2016724 的回复:
preincrement
template<class T>
T& operator++()
{
++*this;
return this;
}
postincrement
template<class T>
const T operator++(T x)
{
T temp(x);
++*this;
return temp;
}
问题很大
你在++重载函数里面调用了 ++ 这会导致递归 而你的函数没有退出递归的条件 麻烦大了
y2016724 2020-01-19
  • 打赏
  • 举报
回复
preincrement template<class T> T& operator++() { ++*this; return this; } postincrement template<class T> const T operator++(T x) { T temp(x); ++*this; return temp; }
qq_40162781 2020-01-02
  • 打赏
  • 举报
回复
我觉得楼主说的是对的。。。不过没必要吵起来
sdghchj 2019-12-30
  • 打赏
  • 举报
回复
引用 56 楼 寻开心 的回复:
个人觉得不用这么争辩 不同的编译器都是可以对c/c++里面的运算符具体实现做不同的处理的 所以还是要看,标准中对这个运算符的定义为准, 找到ISO的定义吧 ++n无论是自增后再返回自身的, 故此可用于当做左值来使用的环境 即便n可能是自定义的类型的,但是也要假定它对++运算符的重载符合该运算符的标准用法 甚至都不要去考虑它是否是自定义的类型,没有意义的 至于qq群踢人, 版主都是要维护自己的所谓的权威的, 只是把管理的权威等同到技术的权威就过分了
没错了,楼主说的是语法层面的,反驳者搬的汇编实现层面的。
sdghchj 2019-12-30
  • 打赏
  • 举报
回复
有意思的问题。 两位大佬,收了神通吧。 浅见:引用本身不就是语法层面的概念吗?
lin5161678 2019-12-30
  • 打赏
  • 举报
回复
引用 102 楼 孤星血泪 的回复:
天呐,论坛里都是牛叉,坛主的主题不是吐槽半桶水吗?为什么评论全是技术?
我发帖的时候也没想到会有人在这个帖子里面和我讨论编程
  • 打赏
  • 举报
回复
天呐,论坛里都是牛叉,坛主的主题不是吐槽半桶水吗?为什么评论全是技术?
lin5161678 2019-12-27
  • 打赏
  • 举报
回复
引用 95 楼 翅膀又硬了 的回复:
[quote=引用 94 楼 lin5161678 的回复:] [quote=引用 92 楼 走好每一步的回复:]我就是灌水而已,我觉得使用技术去实现价值是比较有意思的事情。 n++,++n当然要懂,但是没必要上升到很高的高度,这种语法的东西。 如果是有歧义,尽量避免这种写法就好了。 如果能够争论如何写出高质量的程序,这不是更有意义吗
你灌水的姿势不对 重灌[/quote]尽管被你怼过了,还想被你怼一次。纠结这些细节没什么意义,不如尽量避免。就算你很精通这些细节,以后你的程序交给别人去维护,肯定更容易改出问题。有些这类的细节,甚至C++标准里面都没有具体规定,你拿着一个编译器,看汇编,就把这个结果当作标准去宣扬,也是欠妥的,换个编译器可能结果就不一样。[/quote]再说避免的问题 哪怕只是为了避免 你也得对此有所了解 才能有的放矢的避免 你根本不知道存在区别 你根本没想到需要做避免 所谓避免变成空谈
lin5161678 2019-12-27
  • 打赏
  • 举报
回复
引用 95 楼 翅膀又硬了 的回复:
[quote=引用 94 楼 lin5161678 的回复:] [quote=引用 92 楼 走好每一步的回复:]我就是灌水而已,我觉得使用技术去实现价值是比较有意思的事情。 n++,++n当然要懂,但是没必要上升到很高的高度,这种语法的东西。 如果是有歧义,尽量避免这种写法就好了。 如果能够争论如何写出高质量的程序,这不是更有意义吗
你灌水的姿势不对 重灌[/quote]尽管被你怼过了,还想被你怼一次。纠结这些细节没什么意义,不如尽量避免。就算你很精通这些细节,以后你的程序交给别人去维护,肯定更容易改出问题。有些这类的细节,甚至C++标准里面都没有具体规定,你拿着一个编译器,看汇编,就把这个结果当作标准去宣扬,也是欠妥的,换个编译器可能结果就不一样。[/quote]我前面提过 这里可以再说一次 n++ 结果是右值 ++n 结果是左值 这是标准文档的要求 而值属性影响类型推导 类型推导对 重载/模板相关 等都有影响 分不清左值右值在哪里踩坑都不算意外 并且这个内容是基础知识 不复杂只是细节多 维护代码 连个左值右值都分不清 维护C++代码本身就是一个灾难
9527 2019-12-27
  • 打赏
  • 举报
回复
马扎前排围观
翅膀又硬了 2019-12-27
  • 打赏
  • 举报
回复
引用 94 楼 lin5161678 的回复:
[quote=引用 92 楼 走好每一步的回复:]我就是灌水而已,我觉得使用技术去实现价值是比较有意思的事情。
n++,++n当然要懂,但是没必要上升到很高的高度,这种语法的东西。
如果是有歧义,尽量避免这种写法就好了。
如果能够争论如何写出高质量的程序,这不是更有意义吗

你灌水的姿势不对
重灌[/quote]尽管被你怼过了,还想被你怼一次。纠结这些细节没什么意义,不如尽量避免。就算你很精通这些细节,以后你的程序交给别人去维护,肯定更容易改出问题。有些这类的细节,甚至C++标准里面都没有具体规定,你拿着一个编译器,看汇编,就把这个结果当作标准去宣扬,也是欠妥的,换个编译器可能结果就不一样。
xlfddlfd 2019-12-26
  • 打赏
  • 举报
回复
楼主的理解是对的.
lin5161678 2019-12-26
  • 打赏
  • 举报
回复
引用 78 楼 hzy694358的回复:
[quote=引用 77 楼 lin5161678 的回复:] [quote=引用 76 楼 hzy694358 的回复:] 这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
1 前天到现在 我还真没写过一行测试代码 因为太简单 都只是基本语法 我都掌握得很好 不需要测试 2 计较这种的意义很多 表达式的值属性直接影响类型推导会在函数重载 模板特化等多个地方生效 并且 你根本不懂你怎么知道有没有意义? 3 不同系统不同编译器对这个细节没有区别 因为这是标准文档的要求 不符合要求就是不合格的编译器 是编译器BUG 4 你知道你自己是菜鸟就低调点 有什么不懂你提问我回答完全没问题 自己把脸伸过来让我打 那我就不客气了 扇完左脸扇右脸左右开弓 5 说工作用不上 你自己工作了没?你的工作能代表全世界所有开发的工作吗 你用不上就等于所有工作都用不上吗 你这工作是做上帝吧?[/quote] 看看我年限就知道我工作了没,反正我工作中没有需要去甄别这种东西的 还有你不测试 怎么会知道C++ 和C的实现不一样的?至少我敢肯定99%以上的人是不会注意到这个区别的, 这个区别对我工作来说没啥意义,因为我用不到,所以你就继续你的高科技 我继续我的复制粘贴 哈哈 但是你这样怼天怼地怼泰迪 真的好吗
引用 77 楼 lin5161678 的回复:
[quote=引用 76 楼 hzy694358 的回复:] 这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
1 前天到现在 我还真没写过一行测试代码 因为太简单 都只是基本语法 我都掌握得很好 不需要测试 2 计较这种的意义很多 表达式的值属性直接影响类型推导会在函数重载 模板特化等多个地方生效 并且 你根本不懂你怎么知道有没有意义? 3 不同系统不同编译器对这个细节没有区别 因为这是标准文档的要求 不符合要求就是不合格的编译器 是编译器BUG 4 你知道你自己是菜鸟就低调点 有什么不懂你提问我回答完全没问题 自己把脸伸过来让我打 那我就不客气了 扇完左脸扇右脸左右开弓 5 说工作用不上 你自己工作了没?你的工作能代表全世界所有开发的工作吗 你用不上就等于所有工作都用不上吗 你这工作是做上帝吧?[/quote] 看看我年限就知道我工作了没,反正我工作中没有需要去甄别这种东西的 还有你不测试 怎么会知道C++ 和C的实现不一样的?至少我敢肯定99%以上的人是不会注意到这个区别的, 这个区别对我工作来说没啥意义,因为我用不到,所以你就继续你的高科技 我继续我的复制粘贴 哈哈 但是你这样怼天怼地怼泰迪 真的好吗[/quote] 1 你的年限没人在意 别自作多情 2 你工作用不到别人工作用得到 你代表不了开发的全部水平 3 我不测试就知道区别只是我基础扎实 了解表达式左值右值 别随便99% 我认识的开发里面水平比我好基础比我好的大有人在 知道这个区别的人到处都是 只是你坐井观天 4 我在怼你 而你认为我在怼泰迪 这么说你自认自己是泰迪 额你只是基础差不用这样自轻自贱 好好学习多看书就好了 对自己好点
hzy694358 2019-12-26
  • 打赏
  • 举报
回复
引用 77 楼 lin5161678 的回复:
[quote=引用 76 楼 hzy694358 的回复:] 这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
1 前天到现在 我还真没写过一行测试代码 因为太简单 都只是基本语法 我都掌握得很好 不需要测试 2 计较这种的意义很多 表达式的值属性直接影响类型推导会在函数重载 模板特化等多个地方生效 并且 你根本不懂你怎么知道有没有意义? 3 不同系统不同编译器对这个细节没有区别 因为这是标准文档的要求 不符合要求就是不合格的编译器 是编译器BUG 4 你知道你自己是菜鸟就低调点 有什么不懂你提问我回答完全没问题 自己把脸伸过来让我打 那我就不客气了 扇完左脸扇右脸左右开弓 5 说工作用不上 你自己工作了没?你的工作能代表全世界所有开发的工作吗 你用不上就等于所有工作都用不上吗 你这工作是做上帝吧?[/quote] 看看我年限就知道我工作了没,反正我工作中没有需要去甄别这种东西的 还有你不测试 怎么会知道C++ 和C的实现不一样的?至少我敢肯定99%以上的人是不会注意到这个区别的, 这个区别对我工作来说没啥意义,因为我用不到,所以你就继续你的高科技 我继续我的复制粘贴 哈哈 但是你这样怼天怼地怼泰迪 真的好吗
引用 77 楼 lin5161678 的回复:
[quote=引用 76 楼 hzy694358 的回复:] 这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
1 前天到现在 我还真没写过一行测试代码 因为太简单 都只是基本语法 我都掌握得很好 不需要测试 2 计较这种的意义很多 表达式的值属性直接影响类型推导会在函数重载 模板特化等多个地方生效 并且 你根本不懂你怎么知道有没有意义? 3 不同系统不同编译器对这个细节没有区别 因为这是标准文档的要求 不符合要求就是不合格的编译器 是编译器BUG 4 你知道你自己是菜鸟就低调点 有什么不懂你提问我回答完全没问题 自己把脸伸过来让我打 那我就不客气了 扇完左脸扇右脸左右开弓 5 说工作用不上 你自己工作了没?你的工作能代表全世界所有开发的工作吗 你用不上就等于所有工作都用不上吗 你这工作是做上帝吧?[/quote] 看看我年限就知道我工作了没,反正我工作中没有需要去甄别这种东西的 还有你不测试 怎么会知道C++ 和C的实现不一样的?至少我敢肯定99%以上的人是不会注意到这个区别的, 这个区别对我工作来说没啥意义,因为我用不到,所以你就继续你的高科技 我继续我的复制粘贴 哈哈 但是你这样怼天怼地怼泰迪 真的好吗
lin5161678 2019-12-26
  • 打赏
  • 举报
回复
引用 76 楼 hzy694358 的回复:
这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
1 前天到现在 我还真没写过一行测试代码 因为太简单 都只是基本语法 我都掌握得很好 不需要测试 2 计较这种的意义很多 表达式的值属性直接影响类型推导会在函数重载 模板特化等多个地方生效 并且 你根本不懂你怎么知道有没有意义? 3 不同系统不同编译器对这个细节没有区别 因为这是标准文档的要求 不符合要求就是不合格的编译器 是编译器BUG 4 你知道你自己是菜鸟就低调点 有什么不懂你提问我回答完全没问题 自己把脸伸过来让我打 那我就不客气了 扇完左脸扇右脸左右开弓 5 说工作用不上 你自己工作了没?你的工作能代表全世界所有开发的工作吗 你用不上就等于所有工作都用不上吗 你这工作是做上帝吧?
hzy694358 2019-12-26
  • 打赏
  • 举报
回复
引用 75 楼 lin5161678 的回复:
[quote=引用 71 楼 hzy694358 的回复:] 既然楼主说不一样,那楼主的代码到底是C的呢还是C++的呢, 自己都没说清楚 不是自己打自己的脸?
(++n) = 10 合法 这必然是C++代码呀 C语言 (++n) = 10 非法 这都不知道吗 菜鸟啊 菜鸟啊 什么都不懂就瞎评论 自己给自己丢人 看来是你在自己打自己脸嘛 哎哟自虐狂 害怕.jpg [/quote] 这种细节性的东西 你没亲自测试 你会知道吗,我本来就是菜鸟 不需要你说,哈哈 但是计较这种有意义?不同的系统 不同的编译器 本来对一些细节的实现就有区别 自己知道就好了,工作上真用不上这种,需要让人去甄别这种区别的代码 也是非常不友好的代码
lin5161678 2019-12-26
  • 打赏
  • 举报
回复
引用 71 楼 hzy694358 的回复:
既然楼主说不一样,那楼主的代码到底是C的呢还是C++的呢, 自己都没说清楚 不是自己打自己的脸?
(++n) = 10 合法 这必然是C++代码呀 C语言 (++n) = 10 非法 这都不知道吗 菜鸟啊 菜鸟啊 什么都不懂就瞎评论 自己给自己丢人 看来是你在自己打自己脸嘛 哎哟自虐狂 害怕.jpg
lin5161678 2019-12-26
  • 打赏
  • 举报
回复
引用 72 楼 翅膀又硬了 的回复:
整天讨论这玩意儿,是不是闲的难受
干卿叼事
lin5161678 2019-12-26
  • 打赏
  • 举报
回复
引用 71 楼 hzy694358 的回复:
既然楼主说不一样,那楼主的代码到底是C的呢还是C++的呢, 自己都没说清楚 不是自己打自己的脸?
我既然提到引用 那么当然是C++代码了 这都搞不懂吗 菜鸟啊菜鸟哈哈哈
加载更多回复(86)

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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