为什么复合文字到目前为止不是C++的一部分
Why are compound literals not part of C++ so far?
我知道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
}
相关文章:
- C++:如何使函数只返回作为列表一部分的字符串
- std::sort()函数无法对向量的一部分进行排序
- 将类型声明为类型模板参数的模板参数的一部分是否合法?
- 反转整数的一部分(一半)的函数
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- C 指针和对象作为不同类的一部分
- 如何分析代码的哪一部分创建了线程?
- 如何使用接口指针调用方法,该指针是其具体类的一部分,而不是接口的一部分
- 复制矩阵的一部分并粘贴到另一个矩阵C++上
- 我可以将c ++清理器仅应用于程序的一部分而不是第三方库吗?
- C++向量的哪一部分在传递给函数时被复制
- C++结构的一部分
- 在 MPI 中共享数组的一部分
- 如何检测文件夹是否太重,如果是,请删除其中的一部分
- 如何将文件的一部分读取到std::list缓冲区?
- c++中的交叉编译(作为跨平台应用程序的一部分或作为服务)
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 如何将字符串的一部分转换为整数
- 如何有效地将一个大std::字符串的一部分转换为float
- OpenCV-如何将vale添加到图像一部分的所有像素