[C++] C++标准中定义的实体(entity)/ 声明 / 定义

在C++标准中,定义了C++语言中所有的entity

  • values
  • objects
  • reference
  • structured bindings (since C++17)
  • functions(不包括lambda)。
  • enumerators
  • types
  • class members
  • templates
  • template specializations
  • namespaces
  • parameter packs
    特别指出,预处理宏(macro)并不是C++的entity。

以下为个人观点,并非C++标准定义
尽管lambda被认为是匿名函数,但在C++中,lambda表达式计算的结果实则为函数对象(function object);即严格的来说,lambda是实体,但是不是函数实体,而是(函数)对象实体。

auto l = [](){}; // define a lambda

// print: 1
std::cout << std::is_object_v<decltype(l)> << std::endl;

// print: 0
std::cout << std::is_function_v<decltype(l)> << std::endl;

个人观点结束

实体是通过声明来引入的,同时赋予实体名字以及相关的属性。如果一条实体声明语句定义了使用该实体所需的所有属性,这种声明语句被称为定义。一个实体(内联函数与变量除外)只能由一条定义语句来定义,在C++中被称为单定义规则(one defintion rule);但是在必要的时候,可以由多条声明语句来声明。
注:如果一个实体有多个定义,即同名实体存在多处定义,在链接时,链接器无法确定程序要引用的是哪个定义。

上一篇:使用AsyncRestTemplate 来实现异步的回调


下一篇:Entity和DTO之间的关系