在C ++中将char转换为int的原因是什么?

时间:2015-09-06 04:16:36

标签: casting char int

在C ++中将char转换为int的原因是什么?

2 个答案:

答案 0 :(得分:1)

public class ReadLine { public static void main(String[] args) throws IOException { File f = new File(""); BufferedReader br = new BufferedReader(new FileReader(f)); try { String line = br.readLine(); while(line != null) { line = br.readLine(); final Scanner s = new Scanner(line); while(s.hasNextInt()) { final int i = s.nextInt(); // code using i here } } } finally { br.close(); } } 值转换为 QVector<double> x(96), y(96); for (int i=0; i<95; ++i) { x[i] = i*900+22500; y[i] = someValues loaded from db } ui->customPlot->addGraph(); ui->customPlot->setBackground(QBrush(QColor(239, 239, 239, 255))); ui->customPlot->graph(0)->setData(x, y); ui->customPlot->xAxis->setRange(21600, 108000); ui->customPlot->xAxis->setTickLabelType(QCPAxis::ltDateTime); ui->customPlot->xAxis->setDateTimeFormat("h:mm"); //ui->customPlot->xAxis->setTickStep(7200); 很少有意义。

首先,一些术语。 强制转换是一种显式转换,通过强制转换运算符指定,可以是C样式char,也可以是int之类的C ++强制转换。 隐式转换不是强制转换。你有时会看到短语&#34;隐式演员&#34;,但在C ++(或C)中没有这样的东西。

大多数算术运算符如果它们的整数类型比(type)exprstatic_cast<type>(expr)更窄,则会提升它们的操作数。例如,在表达式int中,unsigned int的{​​{1}}值在添加之前会提升为'0' + 1,结果的类型为char。< / p>

如果要为0对象分配int值,只需指定它即可。隐式转换该值,就像使用强制转换一样。

在大多数情况下,隐式转换优先于强制转换,部分原因是它们不易出错。语言规则通常指定的隐式转换是正确的。

在某些情况下,您确实需要将int投射到char。这是一个:

int

重载的char运算符接受intchar c = 'A'; std::cout << "c = '" << c << "' = " << static_cast<int>(c) << "\n"; (以及许多其他类型),因此没有隐式转换。如果没有强制转换,相同的<<值将被使用两次。输出(假设基于ASCII的字符集)是:

char

这是一种不寻常的情况,因为int运算符对类型charc = 'A' = 65 的处理方式截然不同。在大多数情况下,由于<<已经是整数类型,因此使用charint值并不重要。

我可以想到另一个非常模糊的可能性。 char几乎始终提升为char。但是对于普通int未签名 charint宽度相同的实现,普通char会提升为{{1 }}。只有在charint时才会发生这种情况。您不太可能遇到这样的实施。即使在这样的系统上,char是否被提升为unsigned intCHAR_BIT >= 16通常也无关紧要,因为任一促销都会产生正确的数值。

答案 1 :(得分:0)

一般来说,这应该很少发生,因为它在使用char时何时相当明确,何时使用int。

但是,如果您对一组字符执行算术感兴趣,则需要更多内存来存储整体值,因此您通常可以使用int(或任何其他数据类型)来存储整体值

通过这样做,您可能会更多地隐式地将字符转换为所选的数据类型。

但是,您也可以在计算之前或计算过程中显式地转换这些字符(尽管C ++的更高版本会为您处理此问题)。

这是一种更常见的用于铸造字符的方法。

然而在实践中,通常可以避免这种情况,因为从长远来看,它可以制造更强大的清洁代码