V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  amiwrong123  ›  全部回复第 12 页 / 共 40 页
回复总数  781
1 ... 8  9  10  11  12  13  14  15  16  17 ... 40  
2022-03-08 21:59:51 +08:00
回复了 amiwrong123 创建的主题 C++ c++ lambda 表达式里 为什么值捕获的局部变量无法修改?
另外, 楼上的代码是在 cppinsights 的 C++14 上执行的哈
2022-03-08 21:56:14 +08:00
回复了 amiwrong123 创建的主题 C++ c++ lambda 表达式里 为什么值捕获的局部变量无法修改?
@elfive #1
@codehz #2
@missdeer #3
@victorbian #5
@dangyuluo #6
@dcsuibian #8

各位大佬,问个问题。
https://cppinsights.io/s/69a816df
就是如上这个代码,为什么我看 main 函数里生成的 local class 里,有这么定义的 Member templates:
```
template<class ... type_parameter_0_0>
inline auto operator()(type_parameter_0_0... param) const
{
print(param...);
}
```
但实际上,local class 不能有 Member templates ( https://zh.cppreference.com/w/cpp/language/member_template 这里有说,你把 右边的代码放进 vs 也是编译不能通过)。
所以,为什么实际生成的代码 违反了 invalid declaration of member template in local class ?

另外,之所以还需要 void print() {}这个函数定义,是不是因为:最后一次调用 void print(const First& first, Rest &&... args)时,第二个参数 args 实际上已经是 void ,所以接着又会调用到 void print() {}里面?(不知道我这么解释对不对,所以不对,请帮忙用正确的术语描述一下😂)
2022-03-06 11:10:57 +08:00
回复了 amiwrong123 创建的主题 C++ c++ lambda 表达式里 为什么值捕获的局部变量无法修改?
@elfive #1
是的,改成这样就可以编译通过。但我想知道,按值捕获的 lambda 表达式到底 实际上生成了什么样子的匿名结构体实例(然后才会造成,无法修改 按值捕获的变量)。
2022-02-10 13:50:08 +08:00
回复了 amiwrong123 创建的主题 问与答 闲鱼现场交易二手打印机,怎么验机?
@123jiayue
可以自动双面的 hp2055d.hp1606d ,老哥觉得怎么样。虽然能自动双面,但可能会有更多问题么
2022-02-10 09:50:49 +08:00
回复了 amiwrong123 创建的主题 问与答 闲鱼现场交易二手打印机,怎么验机?
@123jiayue #4
12A 硒鼓的 hp 打印机都没有自动打印功能。不过好像放弃自动双面也没关系,只是稍微麻烦点(就是自己手动再放一遍纸)。

>直接打印一张全黑的就知道哪里有没有问题
对哈,就可以看掉粉不了呗
2022-02-10 09:46:14 +08:00
回复了 amiwrong123 创建的主题 问与答 闲鱼现场交易二手打印机,怎么验机?
@Mac #3
自己用,每个月都要打印。那我就 直接拼多多买个二手的 得了
2022-02-10 08:50:21 +08:00
回复了 amiwrong123 创建的主题 问与答 闲鱼现场交易二手打印机,怎么验机?
@thedrwu
确实没想到,扫描仪能够单独买。可能这个拼多多上也很多
2022-01-30 18:03:40 +08:00
回复了 amiwrong123 创建的主题 C++ 项目中这样去隐藏类的真正实现 是种好的做法吗?
@GPIO #3
之所以一定要用`class ModuleA : public ModuleBase{};`这样的继承,而不用组合。是因为:
```cpp
class ModuleBase
{
ModuleBase();
ModuleBase(ModuleBase* _impl);
virtual ~ModuleBase() {}

//这三个函数都需要每个模块,自己去实现的
virtual void onTimer(int timerId) {};//启动定时器后,之后会异步调用到的函数
virtual void onStart() {};//模块初始化
virtual void onStop() {};

android::sp<ModuleBase> impl;
};
```
ModuleBase 有三个虚函数是默认实现,需要每个模块去重写。比如 ModuleA 去重写 onStart ,实现自己模块需要初始化的事情。所以各个模块都需要实现 onStart 这个函数实现。会由一个线程分别调用 ModuleA 、ModuleB 、ModuleC…… 的 onStart (调用的时候 使用到了多态,通过 ModuleBase 指针来调用 ModuleA 的实现)。
2022-01-30 16:40:36 +08:00
回复了 amiwrong123 创建的主题 C++ 项目中这样去隐藏类的真正实现 是种好的做法吗?
![]( https://i.bmp.ovh/imgs/2022/01/8971e3381336fb2c.png)
这个图才是对的,下面的是 ModuleBase 的子类。
2022-01-30 16:30:12 +08:00
回复了 amiwrong123 创建的主题 C++ 项目中这样去隐藏类的真正实现 是种好的做法吗?
![]( https://i.bmp.ovh/imgs/2022/01/b278977e8b169435.png)
我画了个图,希望能方便理解😂
2022-01-28 14:58:37 +08:00
回复了 amiwrong123 创建的主题 C++ 万能引用进行重载的替代方案:标签派发的疑问?
@dangyuluo #5
目前没有项目驱动。第一份工作是干的 Android framework 开发,但安卓没学到太多,c++当时也没好好学。现在第二份工作基本没用到 c++(也不是用的 java ,反正工作内容不太喜欢),最近想跳槽。
之前花了很多功夫研究 java ,想转 java 方向,但没成功(也不算白学,安卓 framework 开发也会写 java )。
最近终于下定决心 走 Android framework 开发或者 c++开发了,这两个都对 c++有要求。个人有一定 c++基础,但感觉知识很不系统,所以最近在好好看一遍。
2022-01-28 13:15:31 +08:00
回复了 amiwrong123 创建的主题 C++ 万能引用进行重载的替代方案:标签派发的疑问?
@dangyuluo #2
谢谢哥们提醒,这两天发帖确实有点心急了。其实发帖前,我也是尽量去看书了(手头目前有这几本 c++经典书籍,c++ primer ,effctive c++, effctive c++more, 深入探索 c++对象模型,effective modern c++,c++编程思想。编程思想 900 多页,哎,我留到最后慢慢看吧),还有看网上的资料,比如有 www.cplusplus.comhttps://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md https://www.cprogramming.com/tutorial/lesson1.html ,还有网上的一大堆博客。( cplusplus 是个好资料,但对于现在的我来说,只适合浅尝辄止)( PS:资料太多感觉自己要迷失在知识的海洋里了😂)

类似“知识的诅咒”,有时候感觉自己会受到“没有知识的诅咒”,就是一个问题摆在我面前,我甚至都不知道该去搜素什么关键词来解答自己的问题(比如复制消除、rule of five 。当然,就算按照“定义了移动构造函数,会导致赋值操作符被删除”来搜索应该也能搜到 rule of five ,但过程可能会很曲折,当然这可能也和搜索技巧有关)。反正这种就很尴尬,当然这也与我 资料看得太少有关。

总之,我会尽量多查阅资料后再发帖的。
2022-01-27 23:25:44 +08:00
回复了 amiwrong123 创建的主题 C++ std::move 的实现使用到了万能引用?
@zzxxisme #1
@jackchenly #6
@littlewing #7
```cpp
#include <iostream>
using namespace std;

class A {};

A returnTemp() { return A(); }

void test(const A& x) { cout << "left" << endl; }

void test(A&& x) { cout << "right" << endl; }

int main()
{
auto&& c = returnTemp();//万能引用,推断为 A&&
test(std::move(c));

return 0;
}

```
auto&& c 这里也是万能引用,按照万能引用的说法,returnTemp 函数返回一个 A 类型,A 类型经过万能引用推导,应该也是 A 类型呀?
但是我经过了 vs2019 debug 后,发现 c 的类型为 A&&,这是为什么呀?
2022-01-27 10:23:24 +08:00
回复了 amiwrong123 创建的主题 C++ std::move 的实现使用到了万能引用?
@zzxxisme
在 vs2019 里看了一下,确实 std::move 就只有一个实现
2022-01-27 00:35:28 +08:00
回复了 amiwrong123 创建的主题 C++ std::move 的实现使用到了万能引用?
@zzxxisme #1
所以,std::move 只有这一个实现也能正常工作,因为它什么类型都可以接,是吧。

附言里我加的这个问题,为什么有了万能引用版本的函数,还能调用到左值引用版本的函数呀?有点不理解了,老哥

>std::move 加一个 constexpr 并不意味着返回值一定要加 const
constexpr int fun() {
return 1;
}

int main()
{
int a = fun();
}
上面这个程序是不是就是你说的意思? constexpr 函数可以赋值给 constexpr 标识符,也可以赋值非常量的标识符(如上程序)。
2022-01-25 00:41:05 +08:00
回复了 amiwrong123 创建的主题 C++ c++函数返回临时变量和局部变量,有什么区别?
@statumer #8
> 现在你写的第一种是标准要求的 guaranteed copy elision 了,满足 copy elision 规则所以只调用默认构造函数(并不是两次优化)。
那是不是也可以理解为 有两次 copy elision ,return 时一次,初始化变量时一次。

>你写的第三种应该是不合法的,A()是临时对象会被分配到栈上,returnValue_2 返回了一个栈上对象的引用。严重时会导致段错误。
我记得不是有一种,引用可以延长临时变量生命周期的东西?这样是不是就是合法的 了。

另外,看 cppreference 总感觉有些话看不懂:
>即使复制 /移动构造函数和析构函数拥有可观察的副作用
这句啥意思阿,啥叫可观察的副作用😂

struct C { /* ... */ };
C f();
struct D;
D g();
struct D : C {
D() : C(f()) { } // 初始化基类子对象时无消除
D(int) : D(g()) { } // 无消除,因为正在初始化的 D 对象可能是某个其他类的基类子对象
};
>无消除,因为正在初始化的 D 对象可能是某个其他类的基类子对象
它是说 D(g())这里吗,这里看起来是调用了一个 委托构造函数,正在初始化的 D 对象怎么可能是某个其他类的基类子对象呢?( D 也没有派生类阿。。)
2022-01-24 21:38:40 +08:00
回复了 amiwrong123 创建的主题 C++ c++函数返回临时变量和局部变量,有什么区别?
@v2byy #4
真的哎,release 模式 居然不一样,这是为啥
2022-01-24 21:09:37 +08:00
回复了 amiwrong123 创建的主题 C++ c++函数返回临时变量和局部变量,有什么区别?
@jobmailcn #2
优化的话,不应该是连 移动构造函数 都不用调用了吗?(就只用打印一句了)
不过 从 复制构造函数 改成 移动构造函数,也是 进行优化了。
我看 cpprefrence 英文版感到费劲😂
2022-01-20 01:20:17 +08:00
回复了 sumulige 创建的主题 互联网 CSDN 是真无耻啊。
@Cielsky
但 github 找技术书籍的 pdf ,会不会不太好找(或者说不全)
1 ... 8  9  10  11  12  13  14  15  16  17 ... 40  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3621 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 04:32 · PVG 12:32 · LAX 20:32 · JFK 23:32
Developed with CodeLauncher
♥ Do have faith in what you're doing.