示例代码:
// Base.hpp
class Base
{
public:
void changeInternals();
int readInternals();
void printString(std::string& iString);
private:
int m_Internal;
};
// Base.cpp
void Base::changeInternals()
{
m_InternalValue = 5;
}
int Base::readInternals()
{
return m_InternalValue;
}
void Base::printString(std::string& iString)
{
std::cout << iString << std::endl;
}
我的理解是,在使用 g++ 进行优化时,前两个成员函数(changeInternal 和 readInternal)会将“this”指针作为函数参数的一部分,因此它可以访问成员变量 m_Internal。但是,第三个成员函数 printString 不需要查看成员变量,因此不会在参数中包含 this 指针?
在这种情况下,如果我们这样改变:
void Base::printString(std::string& iString)
{
std::cout << boost::lexical_cast<std::string>(m_Internal) << std::endl;
}
成员函数现在需要访问 m_Internal,因此需要此函数的调用者将“this”指针的值放入寄存器。
我希望这会破坏二进制兼容性,但我似乎无法在任何“二进制兼容性陷阱”列表中找到它。是否要求所有成员函数,无论是否接触内部,都具有 this 指针?检查核心中的 gdb 输出(遗憾的是,我无法在此处复制/粘贴 :(,抱歉)暗示不是。
出于这个问题的目的,请假设这里没有发生内联(通过 GCC never_inline 属性)