gpt4 book ai didi

c++ - 在 C++ 中,我可以声明一个引用以表明不会修改它吗?

转载 作者:IT老高 更新时间:2023-10-28 22:16:40 25 4
gpt4 key购买 nike

如果我这样做

typedef void Cb();

int foo(int const& a, Cb cb) {
int x = a;
cb();
return x - a;
}

并用 g++ -O3 -save-temps -c foo.cpp 编译,我看到减法被保留,而 if cb(); 被注释掉,整个函数优化为

xorl    %eax, %eax

我可以对参数 a 的规范做些什么,这样无论对 cb() 的调用如何,减法都会得到优化,并且不会强制执行a 是唯一的引用(即,它可以在其他地方引用,但不会通过这些引用对其进行修改)?

最佳答案

__restrict 扩展,你可以试试 gcc.godbolt.org :

typedef void Cb();

int foo(const int & __restrict a, Cb cb) {
int x = a;
cb();
return x - a;
}

奇怪的是,only clang does the optimization , gcc doesn't do it .


请注意,类似限制的别名被认为是 C++ 标准的一部分:

也许将来你可以按标准来做。

关于c++ - 在 C++ 中,我可以声明一个引用以表明不会修改它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27299440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com