使用内联重载运算符

时间:2018-05-08 09:24:55

标签: c++

我重载了运算符<<以获取矩阵输出。

std::ostream& operator << (std::ostream& os, const Tic& b)
{
    for (int i = 0; i < b.rows; i++)
    {
        for (int j = 0; j < b.cols; j++)
            os << std::setw(5) << b.board[i][j] << " ";
        os << '\n';
    }
    return os;
}

另外,我创建了一个小型打印功能。

inline void print_matrix (const Matrix& _obj)
{
    cout << _obj;
}
  

我可以使用内联print_matrix功能吗?

     

将内联用于重载运算符,还是编译器   仅对cout应用此功能,然后才会将<<称为另一个   功能

2 个答案:

答案 0 :(得分:4)

inline的效果主要是允许将内容包含在多个文件中而不会创建重复项。编译器需要处理此问题而不会导致链接错误。

函数是否实际内联是由compiler options控制的,而不是inline的存在。

请注意,这些选项一直从“不内联任何内容,即使 inline”到“内联任何看似有价值的东西,即使没有标记 inline“。

因此,如果函数inline位于头文件中(并且该头可能包含在多个源文件中),则应将其标记为dbo.mytableforecast

对于运算符也是如此,运算符是一种具有有趣语法的函数。

答案 1 :(得分:2)

如果我正确理解您的问题,您想知道

中的inline是否正确
inline void print_matrix (const Matrix& _obj)
{
    cout << _obj;
}

也会导致编译器对<<的调用进行内联。

事情是:你的前提是错的。很久以前就引入了inline来控制编译器内联的函数。然而,随着时间的推移,事实证明编译器在决定内联比人类更好的方面要好得多。结果inline只是对编译器的一个提示,它唯一的实际用例仍然是告诉链接器当你在头文件中定义的函数上使用inline时它会找到函数的多个定义。有关详细信息,另请参阅here

TL; DR:仅inline上面的print_matrix甚至没有告诉你data: '{"orgId":"1111"}' 是否被内联。如果你想知道编译器实际内联的内容,我推荐你使用这个工具:https://godbolt.org/