关于C ++中类型强制的一个简单问题

时间:2010-05-25 18:39:47

标签: c++ coercion

给定一个函数原型和一个类型定义:

int my_function(unsigned short x);
typedef unsigned short blatherskite;

标准是否定义了以下情况:

int main(int argc, char** argv) {
  int result;
  blatherskite b;

  b=3;
  result = my_function(b);
}

我是否可以通过函数原型预测出类型强制?

2 个答案:

答案 0 :(得分:8)

如果您的问题确实是关于参数的类型和参数是否匹配,那么答案是肯定的。 typedef不会引入新类型,它只为现有类型创建别名。变量b的类型为unsigned int,就像参数一样,即使使用typedef-name b声明了blatherskite

你的例子对于证明这一点并不是很好。所有整数类型都可以在C ++中相互转换,因此(忽略范围问题)即使blatherskite指定了不同的类型(新类型),代码也会定义行为。但事实并非如此。所以这也是完全有效的

void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid

答案 1 :(得分:3)

不需要强制类型。 typedef只是同一类型的别名,因此您将unsigned short传递给采用unsigned short的函数。