以下是Stanley B.LippmanJoséeLajoie撰写的<C++ primer (3rd)>
第7.6章摘录。
指定为内联的函数在调用它的程序中的每个点处“在行”展开。例如,
int minVal2 = min(i,j);
在编译时扩展为
int minVal2 = i&lt; j?我:j;
因此删除了使min()成为函数的运行时开销。 min()通过在函数声明或定义中的函数返回类型之前指定inline关键字来声明内联:
inline int min(int v1,int v2){/ * ... * /}
但请注意,内联规范仅是对编译器的建议。编译器可以选择忽略它 推荐,因为内联声明的函数不适合在调用点扩展。递归函数, 例如rgcd(),无法在调用点完全展开(尽管它的第一次调用可以)。 1,200线 功能也很可能不会在通话点扩展。一般来说,内联机制旨在优化小型,直 线,经常被称为函数。 在抽象数据类型的设计中支持信息隐藏至关重要 例如2.3节中介绍的IntArray类及其size()内联成员函数。
有人可以解释标记为粗体的句子吗?
答案 0 :(得分:1)
数据类型:您可能对这个术语很熟悉。它可以是整数,字符串等,也可以是更复杂的类型,如B树,复数等。
抽象数据类型:这些是代表某些现实对象的数据类型。
e.g。
struct SCustomer
{
string name;
string address;
int id;
enum CreditRanking { Good, Poor, Bankrupt };
CreditRating rating;
};
CreditRating 是一种抽象数据类型, SCustomer 也是如此。
信息隐藏:通过将信息封装在抽象数据类型中,设计人员可以考虑在客户上执行的操作,而不会让SCustomer的实际实现混乱他们的思维过程。
信息并不是真正隐藏的,如果他们愿意,他们可以查看数据类型的定义,但在许多情况下,更容易专注于高(抽象)级别而不考虑小细节。
你可以这样想:
上面的内容过于简化了,但我希望它能给你带来味道。
这有帮助吗?
答案 1 :(得分:1)
我这里没有第3版的全文,但从你发布的背景来看,很明显他在说什么。
想象一种'矢量'类。
class Vector {
private:
int * data; // pointer to data
有几种方法可以提供对矢量大小的访问:
选择1:公共成员变量:
public:
int datasize;
选择2:具有公共访问者的私有变量
private:
int datasize;
public:
int getSize(); // body can be hidden in CPP, but would be { return datasize;};
选择3:为2,但使用内联访问者
private:
int datasize;
public:
inline int getSize() { return datasize; };
现在,#1的数据隐藏性很差,但性能很好。 #2具有很好的数据隐藏性,但性能很差。 #3具有良好的数据隐藏性,可能性能很好。 (记住内联只是一个提示)
在我看来,#3的数据隐藏略逊于#2,因为功能代码显示在标题中 - 即使您无法访问该成员。所以,我会按照......的方式改写他的陈述。
内联函数在需求之间提供了良好的折衷 数据隐藏与绩效。
我不同意它是“最重要的”,因为它只是对编译器的暗示。
答案 2 :(得分:0)
关于“内联函数”的后期出现。
调用内联函数与将代码“排成队”一样快。由于速度和大小的开销,一些程序员可能会犹豫是否将其逻辑封装在函数中,但使用内联函数可以将任何开销(通常)减少到最小量。
想想这段代码:
int customer_code = get_code(customer_name);
int product_code = get_id(product_name);
bool credit_ok = check_credit(customer_code);
int order_number = create_order(customer_code, credit_ok,
product_code, quantity);
print_order(order_number, customer_code, customer_name,
product_code, product_name, quantity);
信息隐藏版本可能如下所示。
order ord = cust.make_order(product, quantity);
order.print();
这构成了一个更大的程序的一部分,你可以使高级代码更容易理解。有人仍然需要设计客户,订单,产品等对象,但他们只需要一次专注于一件事,然后可以在整个程序中使用这些工具。