Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造函数的内联_C++_Inline - Fatal编程技术网

C++ 构造函数的内联

C++ 构造函数的内联,c++,inline,C++,Inline,我试图完全理解内联的作用,但当涉及到构造函数时,我感到困惑。到目前为止,我理解内联函数将把函数放在调用它的位置: class X { public: X() {} inline void Y() { std::cout << "hello" << std::endl; } }; int main() { X x; x.Y; //so instead of this it will be: "std::cout << "h

我试图完全理解内联的作用,但当涉及到构造函数时,我感到困惑。到目前为止,我理解内联函数将把函数放在调用它的位置:

class X {
public:
     X() {}
     inline void Y() { std::cout << "hello" << std::endl; }
};
int main() {
     X x;
     x.Y; //so instead of this it will be: "std::cout << "hello" << std::endl;"
}

inline
的意思仅仅是通知编译器,所讨论的finction将在此翻译以及可能的其他翻译单元中定义。编译器将此信息用于两个目的:

  • 它不会将翻译单元中的函数定义为外部可见的唯一符号,也就是说,您不会得到关于多次定义符号的错误
  • 它可能会改变自己的观点,即是想调用函数来访问finctionality,还是只是在使用它的地方扩展代码。它是否真的将内联代码将取决于编译器可以内联什么,它认为内联什么可能是合理的,可能还取决于月球的阶段
  • 内联函数的类型没有区别。也就是说,它是否是构造函数、成员函数、普通函数等


    顺便说一句,类定义中定义的成员函数是隐式声明的
    inline
    。没有必要明确提及这一点<代码>\uuu forecedinline似乎是一个编译器扩展,假设它按照它所说的做可能是一个坏主意,因为编译器比人类更擅长决定应该内联什么。

    内联
    的意义仅仅是通知编译器,相关的finction将在这个翻译中定义,并且可能还有其他翻译单位。编译器将此信息用于两个目的:

  • 它不会将翻译单元中的函数定义为外部可见的唯一符号,也就是说,您不会得到关于多次定义符号的错误
  • 它可能会改变自己的观点,即是想调用函数来访问finctionality,还是只是在使用它的地方扩展代码。它是否真的将内联代码将取决于编译器可以内联什么,它认为内联什么可能是合理的,可能还取决于月球的阶段
  • 内联函数的类型没有区别。也就是说,它是否是构造函数、成员函数、普通函数等


    顺便说一句,类定义中定义的成员函数是隐式声明的
    inline
    。没有必要明确提及这一点<代码>\uuu forecedinline
    似乎是一个编译器扩展,假设它按照它所说的做可能是一个坏主意,因为编译器比人类更擅长决定应该内联什么。

    这难道不是多余的吗?它应该是Y(){…}而不是Y{…}成员函数的类内定义是隐式的
    inline
    。inline的实际用途是告诉您的构建系统,可以在多个编译单元中定义函数。因此,在您的案例中没有必要使用内联。它不是多余的吗?它应该是Y(){…},而不是Y{…}类中成员函数的定义是隐式
    inline
    。内联的实际用途是告诉您的构建系统可以在多个编译单元中定义函数。因此,在您的案例中没有必要使用内联函数请参见谢谢您的回答,似乎我对内联函数的想法有点不太清楚:)谢谢您的回答,似乎我对内联函数的想法有点不太清楚:)
    class X {
    public:
         //or inline if the compilers feeling friendly for this example
         __forceinline X() {} 
    }