<分区>
Possible Duplicate:
What’s the scope of inline friend functions?
考虑简单的程序:
template<typename T> struct foo{
friend void bar(){}
};
int main(){
foo<int>(); foo<float>();
}
上面的代码违反了ODR规则,我想知道为什么? ,函数 bar
的作用域又在哪里?
标签 c++
<分区>
Possible Duplicate:
What’s the scope of inline friend functions?
考虑简单的程序:
template<typename T> struct foo{
friend void bar(){}
};
int main(){
foo<int>(); foo<float>();
}
上面的代码违反了ODR规则,我想知道为什么? ,函数 bar
的作用域又在哪里?
最佳答案
friend
函数不是成员函数;您只是在一个类中声明友元,但该函数始终是一个自由函数。如果您在类模板类中定义它,您将最终定义它与您拥有的模板实例一样多的次数。
我会尝试用代码来解释。出于我们的目的,您的代码等同于:
template<typename T> struct foo{
};
template<> struct foo<int>{
friend void bar();
};
void bar() {};
template<> struct foo<double>{
friend void bar();
};
void bar() {};
int main(){
foo<int>(); foo<float>();
}
关于c++ - 类模板中定义的友元函数定义的范围是什么/在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13292813/