gpt4 book ai didi

c++ - 使用内联静态数据成员有什么潜在的缺陷吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:14 24 4
gpt4 key购买 nike

引入 C++17 inline variable ,并且可以在类定义中使用初始化程序定义内联静态数据成员。它不需要类外定义。例如,

struct X {
inline static int n = 1;
};

鉴于此,我认为没有理由不总是使用 内联静态数据成员,以获得简洁的语法。这样做有什么陷阱吗?请注意,我不介意编译速度变慢。

最佳答案

这不是陷阱,但这里有一个不使用 inline 的原因:如果变量的初始值不仅仅是一个普通常量,而是更复杂的东西:

struct X {
inline static int n = and_then_more(figure_out_where_n_comes_from());
};

现在,必须将 figure_out_where_n_comes_from()and_then_more() 的声明拉入头文件。

此外,无论 figure_out_where_n_comes_from() 返回什么,都必须声明。它可能是一些过于复杂的 class,然后作为参数传递给 and_then_more(),最终计算 n 的初始值.

#include声明X 的头文件现在必须包含所有这些依赖项的所有头文件。

但是如果没有 inline,您所拥有的只是:

struct X {

static int n;
};

并且您只需要在实例化 X::x 的一个翻译单元中处理所有这些依赖关系。 #include 只关心 X 的头文件。

换句话说:information hiding .如果需要重新实现 n 初始值的来源,您只需重新编译一个翻译单元,而不是整个源代码。

关于c++ - 使用内联静态数据成员有什么潜在的缺陷吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com