相关疑难解决方法(0)

缩小C++ 0x中的转换.它只是我,还是听起来像一个突破性的变化?

的C++ 0x将会使下面的代码和类似代码形成不良的,因为它需要一个所谓的收缩转换double一个int.

int a[] = { 1.0 };
Run Code Online (Sandbox Code Playgroud)

我想知道这种初始化是否在现实代码中被大量使用.这个改变将破坏多少代码?如果您的代码受到影响,是否需要在代码中修复此问题?


供参考,参见n3225的8.5.4/6

缩小转换是隐式转换

  • 从浮点类型到整数类型,或
  • 从long double到double或float,或从double到float,除非source是常量表达式,转换后的实际值在可以表示的值范围内(即使它不能精确表示),或者
  • 从整数类型或无范围枚举类型到浮点类型,除非源是常量表达式,转换后的实际值将适合目标类型,并在转换回原始类型时生成原始值,或者
  • 从整数类型或未范围的枚举类型到不能表示原始类型的所有值的整数类型,除非source是常量表达式,并且转换后的实际值将适合目标类型并且将在生成原始值时生成原始值转换回原始类型.

c++ survey aggregate-initialization c++11

82
推荐指数
5
解决办法
7万
查看次数

C++ 11变量缩小,没有GCC编译器警告

缩小的概念似乎很简单.但是,有人可以解释为什么下面的一些代码导致"缩小"编译器错误而其他代码没有?

此代码在预期的位置产生错误:

constexpr int a = 255;
unsigned char b = a;      // OK
unsigned char c = a + 1;  // Error... expected
Run Code Online (Sandbox Code Playgroud)

此代码不会产生错误,但可能没问题:

int d = 256;
unsigned char e = d;  // Maybe OK because 'd' is not constexpr
Run Code Online (Sandbox Code Playgroud)

此代码应该生成错误(除非我遗漏了一些东西):

int f = 42.0;  // Maybe OK because no fractional part
int g = 42.1;  // OK... should fail!!
constexpr float h = 42.7;
int i = h;     // OK... should fail???
Run Code Online (Sandbox Code Playgroud)

我正在使用g ++ 4.6.2.我搜索了GCC错误数据库,没有发现任何相关内容.谢谢!

c++ c++11

4
推荐指数
1
解决办法
5321
查看次数

标签 统计

c++ ×2

c++11 ×2

aggregate-initialization ×1

survey ×1