gpt4 book ai didi

C++ 大括号分隔的初始化列表

转载 作者:行者123 更新时间:2023-11-28 00:41:33 31 4
gpt4 key购买 nike

我正在阅读 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

为什么不报错?

最佳答案

更新版本的 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

关于C++ 大括号分隔的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623237/

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