学C++总会遇到你完全看不懂所以然的情况,比如下面这个。
首先我新建了两个文件,一个test.h声明,一个test.cpp定义
我想在test里面搞一个自定义的IO flag
//test.h
const static int idx = std::ios_base::xalloc();
std::ostream& my_flag( std::ostream& os );
//test.cpp
std::ostream& my_flag( std::ostream& os ){
os.iword(idx) = true;
return os;
}
上面的都是常规操作
//main.cpp
int main(){
cout << my_flat;
cout << cout.iword(idx) << endl;
}
你猜结果怎么招,
输出是0。
============控制变量法找原因==============
经过我反复控制变量,发现问题的关键在于这个【声明与定义分离】
如果你把my_flag写成inline函数,就完全可以正常运行了,和命名空间也完全没有关系
============问题==============
这个神奇情况的【工作原理】是什么?