0

我正在阅读 Stroustrup 最新的 C++ 书籍(第 4 版),书中的以下示例不会引发错误。

#include <iostream>
using namespace std;

int main(const int argc, const char* argv[]) {

  // Narrowing conversion.
  // According to Stroustrup, an error should happen here
  // because the curly-brace-delimited initializer 
  // saves us from conversions that lose information.
  // But after compiling and running the code the output is 7.
  int i2 {7.2};
  cout << i2 << endl;

  return 0;
}

我正在使用以下命令在 Gentoo 系统上编译代码。(g++ 版本:4.6.3)

g++ -std=c++0x -o output input.cpp

为什么它不抛出错误?

4

1 回答 1

3

更新版本的 gcc (4.8.1) 将此视为警告:

trash9.cpp: In function 'int main(int, const char**)':
trash9.cpp:11:14: warning: narrowing conversion of '7.2000000000000002e+0' from
'double' to 'int' inside { } [-Wnarrowing]
   int i2 {7.2};

该标准要求编译器发出“诊断”,因此(使用正确的文档)这无疑是合格的。编译器可以自由地在之后继续编译代码。

VC++ 确实更接近您显然想要的:

trash9.cpp(11) : error C2397: conversion from 'double' to 'int' requires a narro
wing conversion
于 2013-09-04T20:54:56.557 回答