msc*_*msc 4 c++ g++ char c++11 c++14
我编译并在GCC编译器中运行以下代码片段.它成功地运作了.
#include <iostream>
using namespace std;
int main()
{
char ch = char('A');
cout<<ch<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
A
Run Code Online (Sandbox Code Playgroud)
那么,是char()内置类型函数还是系统调用?
Jer*_*fin 11
从技术上讲,这是一个类型转换.标准中用于描述语法的短语是"显式类型转换(功能表示法)".标准([expr.type.conv]/2)的效果描述如下:
如果初始化程序是带括号的单个表达式,则类型转换表达式与相应的强制转换表达式(8.4)等效(在定义中,如果在意义上定义).[...] [T]表达式是指定类型的prvalue,其结果对象使用初始化程序直接初始化(11.6).
在这种情况下,你从'A'(一个字符文字)开始,它已经有类型char1,然后将其强制转换char(所以强制转换没有效果,什么都不做).
如果对具有采用正确参数类型的构造函数的类型执行此操作,则可以使用该类型的构造函数进行转换.但对于其他演员表示法也是如此,例如使用(T)x或static_cast<T>(x).这种语法没有任何关于使用ctor的信息,而不是任何其他可以进行转换的语法.由于你已经明确地进行了转换,它可以用来调用标记的ctor explicit,但除此之外,它实际上并没有任何不同(无论是否使用ctor)而不仅仅是T ch = value;(没有强制转换,但可能反正包括转换).
1.请注意,这是C++与C的不同之处.在C中,字符文字具有类型int,而不是char.
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |