c++ - 类模板中定义的友元函数定义的范围是什么/在哪里?

标签 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/

相关文章:

c++ - 使用 a 升和 b 升(算法)测量 c 升

c++ - 使用 boots::spirit::qi 进行解析的 TBB 并行化

c++ - QPolarChart 的反轴

c++ - 为什么这段代码没有显示 10^5 左右的 n 的输出

c++ - QNetwork回复: Network access is disabled in QWebView

c++ - 遗留函数的 unique_ptr 用法

c++ - 如何从 vector <char>中提取不同数据类型的子 vector ?

c++ - QGLWidget + QGraphicsScene + QGraphicsView问题

c++ - 使用 Flatbuffer Union 导致双重释放或损坏错误

c++11 使用 std::fill 填充二维动态分配数组