gpt4 book ai didi

c++ - C++ 中的类型转换/类型转换混淆

转载 作者:IT老高 更新时间:2023-10-28 23:12:04 25 4
gpt4 key购买 nike

什么是类型转换,什么是类型转换

我应该什么时候使用它们?

详细信息:对不起,如果这是一个明显的问题;我是 C++ 新手,来自 ruby​​ 背景,习惯于 to_sto_i 等。

最佳答案

转换是当一个值,嗯,转换为不同的类型。结果是目标类型的值,并且对于从什么输入(源类型)产生什么输出值有规则。

例如:

int i = 3;
unsigned int j;
j = i; // the value of "i" is converted to "unsigned int".

结果是 unsigned int 值等于 iUINT_MAX+1,此规则是语言的一部分。因此,在这种情况下,值(英文)仍然是“3”,但它是一个无符号整数值 3,与有符号整数值 3 略有不同。

请注意,转换是自动发生的,我们只是在需要无符号 int 值的位置使用了带符号的 int 值,并且语言定义了这意味着什么,而我们实际上并没有说我们正在转换。这就是所谓的“隐式转换”。

Casting”是一种显式转换。

例如:

unsigned int k = (unsigned int)i;
long l = long(i);
unsigned int m = static_cast<unsigned int>(i);

都是类型转换。具体来说,根据标准的 5.4/2,k 使用 cast-expression,而根据 5.2.3/1,l 使用等效的东西(除了我使用了不同的类型)。 m 使用“类型转换运算符”(static_cast),但标准的其他部分也将其称为“强制转换”。

用户定义的类型可以定义“转换函数”,它提供了将你的类型转换为另一种类型的特定规则,并且单参数构造函数也用于转换:

struct Foo {
int a;
Foo(int b) : a(b) {} // single-arg constructor
Foo(int b, int c) : a(b+c) {} // two-arg constructor
operator float () { return float(a); } // conversion function
};

Foo f(3,4); // two-arg constructor
f = static_cast<Foo>(4); // conversion: single-arg constructor is called
float g = f; // conversion: conversion function is called

关于c++ - C++ 中的类型转换/类型转换混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4337306/

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