在C++中,以下语句是有效的:
&Variable;
我认为这没有意义,所以我的问题是,如果你这样做会对编译结果产生影响,或者编译器会将其优化掉吗?
谢谢!
&Variable;
我认为这没有意义,所以我的问题是,如果你这样做会对编译结果产生影响,或者编译器会将其优化掉吗?
谢谢!
考虑下面这段代码:
#include <iostream>
class A {
public:
A* operator &() {
std::cout << "aaa" << std::endl;
return this;
}
};
int main() {
A a;
&a;
return 0;
};
在这种情况下,"&a;"
会生成代码。_com_ptr_t<Interface> pointer;
// some other code could be here
CoCreateInstance( ..., &pointer, ...);// many irrelevant parameters here
CoCreateInstance()或其他对象检索代码不了解C++和_com_ptr_t,因此它只是覆盖传递给它的地址。这就是为什么_com_ptr_t :: operator&()必须首先释放指针所附加的对象(如果有的话)。
因此,对于_com_ptr_t,该语句如下:
&variable;
将具有相同的效果
variable = 0;
优化掉它会改变程序行为。
这完全取决于您使用的编译器和编译选项。C++标准中没有任何内容阻止编译器为这样的语句生成代码。
eval("#include <iostream>\nvoid doit() { std::cout<<\"hello world\n\"; }","doit");
这应该像将字符串写入文件一样运行,将其编译为动态库,链接它,打开其符号表,查找函数指针并调用它;-) - Steve Jessop
(void)Variable;
- Steve Jessop