gpt4 book ai didi

c++ - 为什么到目前为止复合文字还不是 C++ 的一部分?

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:50 24 4
gpt4 key购买 nike

我知道 C 和 C++ 是不同委员会标准化的不同语言。

我知道,与 C 一样,效率从一开始就是 C++ 的主要设计目标。所以,我认为如果任何特性不会产生任何运行时开销,并且如果它是高效的,那么它应该被添加到语言中。 C99 标准有一些非常有用且高效的功能,其中之一就是复合文字。我正在阅读有关编译器文字的信息 here .

下面是一个显示复合文字使用的程序。

#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
}

关于c++ - 为什么到目前为止复合文字还不是 C++ 的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390724/

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