元组作为 return 类型,是否优化了未访问的值?
Tuple as a return type, are unaccessed values optimized out?
我正在 return 以 std::tuple
的形式从一个函数中获取三个项目。
... myFunction()
{
...
return std::tuple< int, unsigned long long, unsigned int >{ errorCode, timeStamp, sizeOfBuffer };
}
由于必须使用 std::get
或 std::tie
访问 return 值,编译器是否针对未使用的值进行了优化 (g++ 4.8)?
是的,可以。 http://goo.gl/UB7DNc
#include "stdio.h"
#include <tuple>
std::tuple<int, unsigned long long, unsigned int> myFunction()
{
return std::tuple<int, unsigned long long, unsigned int>{ 1, 2, 3 };
}
int f()
{
return std::get<0>(myFunction());
}
变成
myFunction():
movq %rdi, %rax
movl , (%rdi)
movq , 8(%rdi)
movl , 16(%rdi)
ret
f():
movl , %eax
ret
我正在 return 以 std::tuple
的形式从一个函数中获取三个项目。
... myFunction()
{
...
return std::tuple< int, unsigned long long, unsigned int >{ errorCode, timeStamp, sizeOfBuffer };
}
由于必须使用 std::get
或 std::tie
访问 return 值,编译器是否针对未使用的值进行了优化 (g++ 4.8)?
是的,可以。 http://goo.gl/UB7DNc
#include "stdio.h"
#include <tuple>
std::tuple<int, unsigned long long, unsigned int> myFunction()
{
return std::tuple<int, unsigned long long, unsigned int>{ 1, 2, 3 };
}
int f()
{
return std::get<0>(myFunction());
}
变成
myFunction():
movq %rdi, %rax
movl , (%rdi)
movq , 8(%rdi)
movl , 16(%rdi)
ret
f():
movl , %eax
ret