如果我有一个伐木类,在释放模式下,是空的, 并且有一个流运算符, 毫无作用。 或多或少看起来是这样的:
struct null_logger
{
template<typename T> inline null_logger& operator<<(T) { return *this; }
};
我创造了一个简单的测试 并粘贴了以下的组装:
const char* foo()
{
return "hello";
}
int main()
{
int i = 0;
null_logger() << i << foo() << " this is a test";
return 0;
}
坦率地说,我并不完全理解集会。 根据 @Als的建议,我找了 call
这是生成的组件, 使用 g+++ -O3 - S main. cpp
。
.file "main.cpp"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "hello"
.text
.p2align 4,,15
.globl _Z3foov
.type _Z3foov, @function
_Z3foov:
.LFB3:
movl $.LC0, %eax
ret
.LFE3:
.size _Z3foov, .-_Z3foov
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB4:
xorl %eax, %eax
ret
.LFE4:
.size main, .-main
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.globl __gxx_personality_v0
.string "zPR"
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x6
.byte 0x3
.long __gxx_personality_v0
.byte 0x3
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB3
.long .LFE3-.LFB3
.uleb128 0x0
.align 8
.LEFDE1:
.LSFDE3:
.long .LEFDE3-.LASFDE3
.LASFDE3:
.long .LASFDE3-.Lframe1
.long .LFB4
.long .LFE4-.LFB4
.uleb128 0x0
.align 8
.LEFDE3:
.ident "GCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]"
.section .comment.SUSE.OPTs,"MS",@progbits,1
.string "Ospwg"
.section .note.GNU-stack,"",@progbits