cla*_*amp 4 c++ compiler-construction optimization reference
在C++中,这样的语句是有效的:
&Variable;
Run Code Online (Sandbox Code Playgroud)
IMO它没有任何意义,所以我的问题是,如果你这样做,它会以任何方式影响编译结果,还是编译器会优化它?
谢谢!
Ale*_*x B 10
请考虑以下代码段:
#include <iostream>
class A {
public:
A* operator &() {
std::cout << "aaa" << std::endl;
return this;
}
};
int main() {
A a;
&a;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"&a;" 将生成代码.
值得记住的是,运算符&()可能会为变量类型重载,有一些副作用并且优化掉这样的语句会改变程序行为.
一个例子是用于控制非C++对象的智能指针--_com_ptr_t.它有一个重载的_com_ptr_t :: operator&(),它检查内部的指针是否已经存储了一些非空地址.如果事实证明存储的地址是非空的,则意味着指针已经附加到某个对象.如果发生这种情况,_com_ptr_t :: operator&()断开对象 - 调用IUnknown :: Release()并将指针设置为null.
这里的副作用是必要的,因为典型的用法是这样的:
_com_ptr_t<Interface> pointer;
// some other code could be here
CoCreateInstance( ..., &pointer, ...);// many irrelevant parameters here
Run Code Online (Sandbox Code Playgroud)
CoCreateInstance()或其他对象检索代码不知道C++和_com_ptr_t所以它只是覆盖传递给它的地址.这就是为什么_com_ptr_t :: operator&()必须首先释放指针附加到的对象(如果有的话).
所以对于_com_ptr_t这句话:
&variable;
Run Code Online (Sandbox Code Playgroud)
会有同样的效果
variable = 0;
Run Code Online (Sandbox Code Playgroud)
并优化它将改变程序行为.
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |