如何理解函数声明中的内联、常量和引用?

How to comprehend inline, const and reference in a function declaration?

我注意到我的程序中有一个函数声明,其中在函数名称前包含 inline, const and reference(&)。单独跟随每个关键字很容易,但是谁能解释一下它们一起使用时的整体含义?

inline const std::string& foo()
{
}

我是 CPP 编程新手。啊,放那么多关键词对我来说没有意义。

  • const std::string&
    这是函数的 return 类型,它是对常量 std::string.

    的引用
  • inline
    这意味着该函数可能被定义多次,但您确信这些定义是相同的,并且链接器可能会保留其中一个定义并丢弃其余定义。您通常在将函数定义放在头文件中时使用它,该头文件包含在多个 cpp 文件中,否则会使 One Definition Rule 无效。

因为 C++ 是一种非常自由形式的语言,可以在运算符、关键字和符号之间添加任意数量的白色-space,所以我们可以这样编写函数(带有有用的注释):

inline              // Hint for the compiler that it's allowed to inline the function
const std::string&  // Function return type, a reference to a constant std::string
foo                 // Function name
()                  // Function arguments, none
{
    // Empty body, not correct since the function is supposed to return something
}

请注意,inline 只是提示允许编译器“内联”函数(基本上是复制粘贴生成的代码,而不是进行实际的函数调用)。无论如何,编译器都允许内联函数调用,the inline keyword have some other implications in regards to linkage.