我知道C+C++是由不同委员会标准化的不同语言。
我知道C效率从一开始就一直是C++的主要设计目标。因此,我认为如果任何特性不会产生任何运行时开销&如果它是有效的,那么应该将其添加到语言中。C99标准具有一些非常有用和有效的特性,其中之一是复合文本。我在读关于编译器文本的文章。
下面是一个显示复合文字用法的程序。

#include <stdio.h>

// Structure to represent a 2D point
struct Point
{
   int x, y;
};

// Utility function to print a point
void printPoint(struct Point p)
{
   printf("%d, %d", p.x, p.y);
}

int main()
{
   // Calling printPoint() without creating any temporary
   // Point variable in main()
   printPoint((struct Point){2, 3});

   /*  Without compound literal, above statement would have
       been written as
       struct Point temp = {2, 3};
       printPoint(temp);  */

   return 0;
}

因此,由于使用了复合文本,没有创建注释中提到的类型为struct Point的额外对象。所以,它不是因为避免了复制对象的额外操作而高效吗?那么,为什么C++仍然不支持这个有用的特性呢?复合文字有什么问题吗?
我知道像g++这样的编译器支持复合文本作为扩展,但它通常会导致不可移植的代码&这段代码并不是严格遵循标准的。有什么建议把这个特性添加到C++中吗?如果C++不支持C的任何特性,那么它背后一定有一些原因,我想知道这个原因。

最佳答案

我认为C++中不需要复合文字,因为在某种程度上,这个功能已经被它的OOP能力(对象、构造函数等等)所覆盖。
你的程序可以简单地改写为C++:

#include <cstdio>

struct Point
{
    Point(int x, int y) : x(x), y(y) {}
    int x, y;
};

void printPoint(Point p)
{
    std::printf("%d, %d", p.x, p.y);
}

int main()
{
    printPoint(Point(2, 3)); // passing an anonymous object
}

10-07 15:36