欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

比较和识别不同版本的VS2013许可证密钥

最编程 2024-02-09 22:52:36
...
c++中的初始化列表详解

神龍Str: “test1 = t1这一行实际上分成两步执行”: 那为什么注释掉赋值操作后仍然会有额外的默认构造函数调用呢?[code=cpp] Test2 (Test1& t1) { // t = t1; } [/code] 仍然输出: constructor for Test1 constructor for Test1 我瞎猜是添加初始化列表影响了c++初始化阶段的规则,也就是不会调用默认构造函数,所以那个Test1默认构造函数在初始化时没有调用。 查看Test2 t2(t1)的汇编: [code=plain] _ZN5Test2C1ER5Test1: pushq %rbp .seh_pushreg %rbp movq %rsp, %rbp .seh_setframe %rbp, 0 subq $32, %rsp .seh_stackalloc 32 .seh_endprologue movq %rcx, 16(%rbp) movq %rdx, 24(%rbp) movq 16(%rbp), %rax movq %rax, %rcx call _ZN5Test1C1Ev movq 16(%rbp), %rax movq 24(%rbp), %rdx movq %rax, %rcx call _ZN5Test1aSERKS_ nop [/code] 可以看到Test1默认构造函数的调用call _ZN5Test1C1Ev是早于Test1中重载的=函数的调用call _ZN5Test1aSERKS_,也就是说不大可能是因为=引起的。

推荐阅读