术语 "method" 是由 C++ 标准定义的吗?
Is the term "method" defined by the C++ Standard?
术语 "method" 经常用于讨论 C++ 代码。独立术语在 C++ 中是否具有明确定义的含义,还是有歧义?单独使用该术语是否可以接受,或者它是否应该被限定(例如 "class method" 或 "virtual method"),或者应该完全避免使用它?
术语 方法 未在 C++ 标准中定义。该术语使用 成员函数。
然而,Bjarne Stroustrup 在他自己的 glossary 中将术语 方法 定义为 虚拟成员函数 。所以这表明该术语是可以接受的。
C++ standard makes no mention of the term method
. It should be noted that the official C++ FAQ does make use of this term, but to describe a virtual
function; a simple Google search 揭示了这个词的更多出现。
我从未在 IDE (Visual Studio) 中见过 method
这个词,但我见过 member function
这个词。在我看来 method
是一个 'one size fits all' 术语。
我会完全避免这个词,因为很清楚你所说的 "member function" 的意思,而不是 "method" - 你问这个问题就足够了。
然而,单词 "method" 在 C++14 标准中的规范出现是
在内容列表中:
17.5 Method of description (Informative)
该部分的标题重复了这一点。
[basic.compound]:
These methods of constructing types can be applied recursively;
[cpp.include]
The method by which a sequence
of preprocessing tokens between a <
and a >
preprocessing token pair or a pair of "
characters is combined
into a single header name preprocessing token is implementation-defined.
[library.general]
The following subclauses describe the definitions (17.3), method of description (17.5), [..]
在table32中提到了FLT_EVAL_METHOD
。
在 num_get
的第 2 阶段 do_get
:
For arithmetic types, punct.thousands_sep()
characters are inserted
into the sequence as determined by the value returned by
punct.do_grouping()
using the method described in 22.4.3.1.2
[forwardlist.modifiers]:
Otherwise, inserts sz - distance(begin(), end())
elements at the end of
the list such that each new element, e
, is initialized by a method equivalent to calling allocator_traits<allocator_type>::construct(get_allocator(), std::addressof(e), c)
.
[filebuf.virtuals]:
Behaves according to the description of
basic_streambuf<charT,traits>::uflow()
, with the specialization that a
sequence of characters is read from the input with the same method as
used by underflow
.
这个词显然从来没有指代 "member function"。
术语方法在历史上曾被用作对象过程的同义词。考虑到,一个对象既有数据又有行为,正是这种行为被称为方法。
向后追溯,在提到 MIT ALGOL 版本 AED-0
时,我可以找到对术语方法用法的引用
MIT ALGOL version, AED-0, linked data structures ("plexes", in that
dialect) directly with procedures, prefiguring what were later termed
"messages", "methods", and "member functions".
多年来,方法一直是面向对象分析与设计和面向对象编程不可或缺的一部分。现在 C++ 发展成为一种过程语言,它扩展了 C 一种过程语言以具有面向对象的能力。 C有结构的概念,数据元素称为成员。参考Methods in C++。
为了不破坏沿袭,C++ 继续将结构化元素和较新的流派 class 称为成员。
现在,为了区分数据和函数,它没有引入新的术语,而是将这个术语扩展为调用数据成员和成员函数。支持动态绑定的成员函数称为虚函数。
所以,严格来说,官方参考文献在提到成员函数时,是避免使用术语方法的。该术语在具有更多面向对象背景的人群中最为流行。所以如果你想保持明确,最好使用术语 as
- 数据成员
- 成员函数
- 虚函数
这里是我对方法这个词的分析。
我扫描了几种编程语言的官方文档(标准、规范等)。
http://componentsprogramming.com/using-the-right-terms-method/
适当的分类法(不依赖于任何编程语言)将在以后的文章中发布。
关于C++,正确的术语是:member/non-member函数。
有些人使用 member/free 函数。
术语 "method" 经常用于讨论 C++ 代码。独立术语在 C++ 中是否具有明确定义的含义,还是有歧义?单独使用该术语是否可以接受,或者它是否应该被限定(例如 "class method" 或 "virtual method"),或者应该完全避免使用它?
术语 方法 未在 C++ 标准中定义。该术语使用 成员函数。
然而,Bjarne Stroustrup 在他自己的 glossary 中将术语 方法 定义为 虚拟成员函数 。所以这表明该术语是可以接受的。
C++ standard makes no mention of the term method
. It should be noted that the official C++ FAQ does make use of this term, but to describe a virtual
function; a simple Google search 揭示了这个词的更多出现。
我从未在 IDE (Visual Studio) 中见过 method
这个词,但我见过 member function
这个词。在我看来 method
是一个 'one size fits all' 术语。
我会完全避免这个词,因为很清楚你所说的 "member function" 的意思,而不是 "method" - 你问这个问题就足够了。
然而,单词 "method" 在 C++14 标准中的规范出现是
在内容列表中:
17.5 Method of description (Informative)
该部分的标题重复了这一点。
[basic.compound]:
These methods of constructing types can be applied recursively;
[cpp.include]
The method by which a sequence of preprocessing tokens between a
<
and a>
preprocessing token pair or a pair of"
characters is combined into a single header name preprocessing token is implementation-defined.[library.general]
The following subclauses describe the definitions (17.3), method of description (17.5), [..]
在table32中提到了
FLT_EVAL_METHOD
。在
num_get
的第 2 阶段do_get
:For arithmetic types,
punct.thousands_sep()
characters are inserted into the sequence as determined by the value returned bypunct.do_grouping()
using the method described in 22.4.3.1.2[forwardlist.modifiers]:
Otherwise, inserts
sz - distance(begin(), end())
elements at the end of the list such that each new element,e
, is initialized by a method equivalent to callingallocator_traits<allocator_type>::construct(get_allocator(), std::addressof(e), c)
.[filebuf.virtuals]:
Behaves according to the description of
basic_streambuf<charT,traits>::uflow()
, with the specialization that a sequence of characters is read from the input with the same method as used byunderflow
.
这个词显然从来没有指代 "member function"。
术语方法在历史上曾被用作对象过程的同义词。考虑到,一个对象既有数据又有行为,正是这种行为被称为方法。 向后追溯,在提到 MIT ALGOL 版本 AED-0
时,我可以找到对术语方法用法的引用MIT ALGOL version, AED-0, linked data structures ("plexes", in that dialect) directly with procedures, prefiguring what were later termed "messages", "methods", and "member functions".
多年来,方法一直是面向对象分析与设计和面向对象编程不可或缺的一部分。现在 C++ 发展成为一种过程语言,它扩展了 C 一种过程语言以具有面向对象的能力。 C有结构的概念,数据元素称为成员。参考Methods in C++。 为了不破坏沿袭,C++ 继续将结构化元素和较新的流派 class 称为成员。
现在,为了区分数据和函数,它没有引入新的术语,而是将这个术语扩展为调用数据成员和成员函数。支持动态绑定的成员函数称为虚函数。
所以,严格来说,官方参考文献在提到成员函数时,是避免使用术语方法的。该术语在具有更多面向对象背景的人群中最为流行。所以如果你想保持明确,最好使用术语 as
- 数据成员
- 成员函数
- 虚函数
这里是我对方法这个词的分析。
我扫描了几种编程语言的官方文档(标准、规范等)。
http://componentsprogramming.com/using-the-right-terms-method/
适当的分类法(不依赖于任何编程语言)将在以后的文章中发布。
关于C++,正确的术语是:member/non-member函数。 有些人使用 member/free 函数。