- 主题:有C/C++/QT大佬吗?可否交流下
如果都是入参,而不是作为返回值使用的,就统一用 const T & 啊。
作为返回值就比较麻烦了。我现在也搞不清楚要传 T* 还是 T&. 前者需要判断一下非空,后者不需要。但后者在调用时,不容易和 const T & 区别开来,阅读的时候不容易看清楚是出参。
【 在 zpfzhang (zpfzhang) 的大作中提到: 】
: 每次传参数用指针还是引用都晕
: 永远不懂
: - 来自「最水木 for iPhone 8」
: ...................
--
FROM 112.47.122.*
引用就是非空的指针啊。
【 在 hyperLee (老李) 的大作中提到: 】
: 能用指针用指针,引用能不用就不用。
: 指针还能判断是否为空, 引用就不能了。
--
FROM 112.47.122.*
嗯。。有道理。但返回 pair tuple 的话,旧版 c++ 的支持不太好吧。在 python 里面比较方便,我就很喜欢用这个模式:
value, flag = do_something()
if not flag:
# value is invalid.
【 在 ziqin (子青|会挽雕弓如满月|西北望|射天狼) 的大作中提到: 】
: 最近的趋势是 不传需要返回的,直接用optional tuple variant之类新的模板解决
: 背后的逻辑似乎是,穿返回值的地址会引起非本栈地址搜索,触发cpu的内存同步,影响效率
--
FROM 140.224.34.*
所以用 Qt 啊。容器都是使用 COW 技术,内部有个引用计数,相当于 shared_ptr<> 省事。
【 在 toutouqi (toutouqi) 的大作中提到: 】
: 语法太多,我觉得这就是c++烂的地方,有些语法是为了防错,有些是提供一部分便利但又引入潜在问题,把路都走歪了。比如容器的move特别不习惯,move来move去,我还不如直接用指针呢。
: 其实最有用的是老老实实增加有用的库,数学库,用个PI都不方便,看到很多代码里都自己定义。
--
FROM 140.224.34.*
如果是 c 语言,考虑到 dll 和主程序可能使用不同的内存分配函数,最好还是谁申请谁负责销毁。弄个`obj_t create_xxx()`和 `delete_xxx(obj_t obj)`
c++ 有析构函数,统一谁 new 谁销毁吧。
【 在 toutouqi (toutouqi) 的大作中提到: 】
: 有时候需要主程序给被调用函数一个空(或者无效)指针,函数负责分配内存,主程序来释放。约定好调用规则,以前没有智能指针的时候也不会出错。
--
FROM 140.224.34.*
巧了,我也是 java 写多以后才写 cpp 的。
从 c 过来的人,估计会习惯传 *
java 的引用和 cpp 的引用是不一样的。还是需要注意。
cpp 的 const 值类型带有 immutable 的意思。我很喜欢用。虽然其实并不是。
【 在 blueboats (天·地·魔·鬥) 的大作中提到: 】
: 可能是我之前java写的多一点,我习惯是都传引用,如果是参数就用const,不是就不带。
: 加了const之后很多费const操作就不能执行了,所以区分上问题也不是很大。
: 如果都是入参,而不是作为返回值使用的,就统一用 const T & 啊。
: ...................
--
FROM 140.224.34.*