会员标识 avatar-decorate
ErgouJing level
获赞
49
粉丝
4
关注
55
看过 TA
4
电子科技大学
2019
golang
IP属地:四川
暂未填写个人简介
私信
关注
头像 会员标识
2019-11-20 15:25
已编辑
电子科技大学 golang
如题
皮卡丘、、、:买爱死爱爱摸
0 点赞 评论 收藏
分享
头像 会员标识
2019-11-03 22:08
已编辑
电子科技大学 golang
小弟在实验楼做这个小练习:C++实现高性能内存池,有一段代码看不懂了: template <typename U, typename... Args> void construct(U* p, Args&&... args) {     new (p) U (std::forward<Args>(args)...); } 请教各位牛友大神,什么意思? 谢谢!
桃园饭桶:C++泛型编程里的可变参数模板可变参数模板是定义的模板函数或模板类可以接受可变数目(>=0)参数(参数包)。这里的Args表示模板参数包,args表示函数参数包。用省略号将一个模板参数或函数参数表示为一个包。模板参数列表中,class...或typename...表示0或多个参数。在函数参数列表中,如果一个参数的类型是模板参数包,则此类型也是一个函数参数包。进一步了解 template <typename T, typename... Args> void func(const T & t, const Args& ... args); int i = 1; double pi = 3.14; string s = "hello world"; func(i); //实例化为 func(const int&) func(s, pi); //实例化为 func(const string&, const double&) C++中右值左值的概念,C++ Prime中的一句话: 当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。 在需要右值的地方可以用左值来代替(实际使用它的值),但是不能把右值当作左值使用。同时,为了支持移动操作,C++11引入了右值引用的概念,通过使用&&而不是&来获得右值引用。 int i = 32; int & lr = 42; //错误,非常量引用的初始值必须为左值 cosnt int& lr = 42 是对的 int && rr = 42; //正确,可以将右值引用绑定到右值表达式上(返回右值的表达式都可) std::forward 函数的作用是将左值转发为左值或右值,依赖于类模板参数T。 template<class T> void wrapper(T&& arg) { // arg 始终是左值 foo(std::forward<T>(arg)); // 转发为左值或右值,依赖于 T } wrapper(2); //T推导为int,forward确保将右值引用传递给foo int i = 3; wrapper(i); //T推导为int&,forward确保将左值引用传递给foo 定位new表达式,如下形式: new (place_address) type; new (place_address) type (initializers); new (place_address) type [size]; new (place_address) type [size] { braced initializer list } place_address必须是一个指针,同时在initializers中提供一个(可能为空)以逗号分隔的初始值列表,改初始值列表用于构造新分配的对象。进一步了解 最后在回到你给的这段代码: template <typename U, typename... Args> void construct(U* p, Args&&... args) { new (p) U(std::forward<Args>(args)...); } 定位new表达式,将指针p所指的地方重新分配内存并根据给定的初始化列表将对象初始化。 int* p = new int(2); construct(p, 3); // cout<<*p 的结果是3,因为重新分配内存并初始化为int(3) string a = "hello world"; construct(&a, "xswl"); // cout << a 的结果是“xswl” 综上,这段代码的作用应该就是,将指针p所指的原本的对象重新分配内存,并根据初始化列表将对象初始化。
0 点赞 评论 收藏
分享
头像 会员标识
2019-08-30 11:00
已编辑
电子科技大学 golang
小弟最近在看python,看到函数的定义中有&nbsp;“&nbsp;[&nbsp;”&nbsp;和&nbsp;“&nbsp;]&nbsp;”&nbsp;符号,如:&nbsp;sorted(iterable[,&nbsp;key][,&nbsp;reverse])&nbsp;其中的&nbsp;[&nbsp;和&nbsp;]&nbsp;表示什么含义呢?&nbsp;还请各位牛友大神解答。&nbsp;谢谢
我叫小挂挂:sorted(iterable,[key],[reverse]) 【】里面是方法的参数,比如[key]来说就是按照什么关键字去进行排序,比如第一个字典进行排序我们可以设定是按照字典的Key还是value去进行排序,[reverse]就是排序的顺序是从小到大还是从大到小
0 点赞 评论 收藏
分享
头像 会员标识
2019-08-29 10:40
已编辑
电子科技大学 golang
小弟最近在看《程序员的自我修养》,遇到一个问题。&nbsp;下面是书本上的内容:&nbsp;小弟在linux上写了这个程序:&nbsp;编译运行得到这样的结果:&nbsp;可以看到运行的结果不是42,而且每次都不同。&nbsp;请问各位牛友大神,这是什么原因呢?&nbsp;谢谢!
百世经纶·一页书:这是直接输出变量和书里面的代码的汇编结果比较: 差别就在于一个是 movl,一个是 movq。所以我把书上的代码改了一下: // extern "C" double _ZN6myname1aE; extern "C" int _ZN6myname1aE; 这样得到的汇编结果就是一样的,输出也是正常的。查看图片
0 点赞 评论 收藏
分享
头像 会员标识
2019-08-03 12:30
已编辑
电子科技大学 golang
代码如下:&nbsp;输出:&nbsp;同学帮我解释一下为啥是这个输出结果?&nbsp;谢谢!
loongll:自己的理解。。 把@log放到now()函数的定义处,相当于执行了语句: now = log(now) 你最后一句执行的函数就相当于是log(log(now)),对于log(now)这个函数来说 他返回的是wrapper这个函数,所以先打印的__func__.name 就是wrapper,然后里面打印的就是now这个函数名 最后执行now函数
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务