C ++中的char()类型是什么?

时间:2017-06-02 06:38:42

标签: c++ c++11 char g++ c++14

我已在GCC编译器中编译并运行以下代码片段。它成功地运作了。

#include <iostream>
using namespace std;

int main()
{
    char ch = char('A'); 
    cout<<ch<<endl;
    return 0;
}

输出:

A

那么,是char()内置类型函数还是系统调用?

2 个答案:

答案 0 :(得分:11)

从技术上讲,这是一个类型转换。标准中用于描述语法的短语是“显式类型转换(功能表示法)”。标准([expr.type.conv] / 2)的效果描述如下:

  

如果初始值设定项是带括号的单个表达式,则类型转换表达式是等效的(在定义中,   并且如果在意义上定义)到相应的强制转换表达式(8.4)。 [...] [T]表达式是指定类型的prvalue,其结果对象使用初始化程序进行直接初始化(11.6)。

在这种情况下,您将从'A'(字符文字)开始,它已经具有char 1 类型,并将其转换为char(所以演员没有任何效果,也没有任何成就。)

如果对具有采用正确参数类型的构造函数的类型执行此操作,则可以使用该类型的构造函数进行转换。但对于其他演员表示法也是如此,例如使用(T)xstatic_cast<T>(x)。这种语法没有任何关于使用ctor的信息,而不是任何其他可以进行转换的语法。由于您已明确转换,因此可以使用它来调用标记为explicit的ctor,但除此之外,它实际上并没有任何不同(就是否使用ctor而言)而不仅仅是{{ 1}}(没有强制转换,但可能还包括转换)。

1.请注意,这是C ++与C不同的地方。在C中,字符文字的类型为T ch = value;,而不是int。 功能

答案 1 :(得分:4)

声明:

 char ch = char('A'); 

调用char类型的构造函数需要char。它不是函数或任何系统调用。实际上,对于基本数据类型,它甚至不是一个调用,它只是一个语法糖,所以任何类型T都可以这样初始化:

T var = T(arg);

在编写模板函数和类时,这种方法非常有用。因此,只要类型T(模板类型参数)进入,编译器就不会抱怨char(arg)无效。