默认值作为全局常量与函数 return 值
Default value as Global const vs. Function return value
在 Bjarne Stroustrup 的《Programming Principles and Practice Using C++》一书的 8.6.2 节 Global initialization 中,建议按如下方式定义默认值(例如日历中的日期):
const Date& default_date()
{
static const Date dd(1970,1,1);
return dd;
}
此方法与仅具有如下全局常量相比如何?
static const Date dd(1970,1,1);
default_date
函数是用具有合适声明的外部 linkage which means it can be used from any translation unit 声明的。
全局变量具有内部链接,因此只能在其定义的翻译单元中使用。
看这里:
从纯粹的表演 POV 来看,明显的赢家是:
在头文件中声明为静态常量
static const Date dd(1970,1,1);
使用constexpr
constexpr Date dd(1970,1,1);
正在从内联方法返回默认值。
inline Date default_date()
{
return Date(1970,1,1);
}
How does this method compare to simply having a global constant as follows?
IF方法在同一个编译单元内编译,那么基本没有区别。但是,如果 default_date 是外部的,那么您将招致一些额外的负载。就个人而言,我只推荐使用 constexpr。
在 Bjarne Stroustrup 的《Programming Principles and Practice Using C++》一书的 8.6.2 节 Global initialization 中,建议按如下方式定义默认值(例如日历中的日期):
const Date& default_date()
{
static const Date dd(1970,1,1);
return dd;
}
此方法与仅具有如下全局常量相比如何?
static const Date dd(1970,1,1);
default_date
函数是用具有合适声明的外部 linkage which means it can be used from any translation unit 声明的。
全局变量具有内部链接,因此只能在其定义的翻译单元中使用。
看这里:
从纯粹的表演 POV 来看,明显的赢家是:
在头文件中声明为静态常量
static const Date dd(1970,1,1);
使用constexpr
constexpr Date dd(1970,1,1);
正在从内联方法返回默认值。
inline Date default_date()
{
return Date(1970,1,1);
}
How does this method compare to simply having a global constant as follows?
IF方法在同一个编译单元内编译,那么基本没有区别。但是,如果 default_date 是外部的,那么您将招致一些额外的负载。就个人而言,我只推荐使用 constexpr。