c++2.inline[内联]
大约 2 分钟
内联函数
#include <iostream>
// 定义内联函数
inline int add(int a, int b)
{
return a + b;
}
int main()
{
int x = 5;
int y = 10;
// 调用内联函数
int result = add(x, y);
std::cout << "Result: " << result << std::endl;
return 0;
}
内联命名空间
#include <iostream>
namespace ParentNamespace
{
namespace ChildNamespace
{
inline namespace ChildNamespace2
{
class TestClass
{
public:
void TestFunction()
{
std::cout << "world" << std::endl;
}
};
}
}
}
int main()
{
// 正确传统作用域解析
ParentNamespace::ChildNamespace::ChildNamespace2::TestClass{}.TestFunction();
// 正确 inline将ChildNamespace2内函数 移到 ChildNamespace
ParentNamespace::ChildNamespace::TestClass{}.TestFunction();
// 错误 inline 只移动一层,即儿子变爸爸,不变爷爷。
ParentNamespace::TestClass{}.TestFunction();
return 0;
}
#include <iostream>
namespace ParentNamespace
{
inline namespace ChildNamespace
{
inline namespace ChildNamespace2
{
class TestClass
{
public:
void TestFunction()
{
std::cout << "world" << std::endl;
}
};
}
}
}
int main()
{
// 正确传统作用域解析
ParentNamespace::ChildNamespace::ChildNamespace2::TestClass{}.TestFunction();
// 正确 inline将ChildNamespace2内函数 移到 ChildNamespace
ParentNamespace::ChildNamespace::TestClass{}.TestFunction();
// 正确 两层inline,函数被提了两次。
ParentNamespace::TestClass{}.TestFunction();
return 0;
}
#include <iostream>
namespace ParentNamespace
{
inline namespace ChildNamespace
{
class TestClass
{
public:
void TestFunction()
{
std::cout << "hello" << std::endl;
}
};
inline namespace ChildNamespace2
{
class TestClass // 使用不同的类名
{
public:
void TestFunction()
{
std::cout << "world" << std::endl;
}
};
}
}
}
int main()
{
ParentNamespace::TestClass{}.TestFunction();//错误inline后出现同名class导致二义性
return 0;
}