c++ - 这种 C++0x 优化合法吗?

标签 c++ c++11

C++0x编译器优化是否合法

int func(int&& a){
    a = 3;
    return a;
}

int func(int&& a){
    return 3;
}

? (或另一个 POD)

最佳答案

不像那样本身,因为函数必须修改变量a 使其等效。也就是说,在内联和一些微不足道的优化之后,结果将是相同的:

int x = func(5);

// pseudo-inlined:
int __temp = 5; // the temporary created by binding 5 to int&&
__temp = 3; // a = 3;
int x = __temp; // return a;

// constant propagation:
int __temp = 5;
__temp = 3;
int x = 3;

// dead-code elimination:
int x = 3;

请注意,结果与使用 func 的第二个定义和内联结果相同,只是因为未使用临时变量。这表明这两个函数通常不等价:

int modifyme = 100;
int x = func(std::move(modifyme));

// modifyme must be 3, second function definition wouldn't do that

关于c++ - 这种 C++0x 优化合法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153710/

相关文章:

c++ - Cpp 头文件缺少变量名

c++ - C++0x 中 char 和 Unicode 的符号

c++ - 如何使用 C++11 线程类在单独的线程中执行类成员函数?

c++ - 如何从列表中删除重复项

c++ - 访问文件和打开文件有什么区别

c++ - 我怎么知道哪些库被动态链接到静态库中?

c++ - C++11 模板中的一个参数可以依赖于另一个吗?

c++ - 即使根据容量()仍有未使用的空间,std::vector 能否将其数据移动到 emplace_back()处的另一个地址?

c++ - cmake:为什么 CMAKE_CXX_STANDARD 似乎不能与 check_cxx_source_compiles 一起使用

c++ - 有人可以解释一下,为什么我的代码不起作用?