通用和统一初始化:`double`到`int`

时间:2016-07-30 16:47:32

标签: c++ c++11 visual-c++ c++14 list-initialization

Visual Studio 2015更新3. C ++ 11 \ C ++ 14。

int

constexpr int ci1 {50};
constexpr int ci2 {500};

char c1 {ci1}; // OK
char c2 {ci2}; // compilation error

即。 通用和统一初始化可以检查编译模式中的值(从intchar)。 Bjarne Stroustrup 在他的书中提到了这个案例。

我希望情况 doubleint ,但它不适用于Visual Studio 2015 Update 3:

constexpr double cd {4.0};
int i1 {cd}; // compilation error

错误讯息:

  

C2397转换为' double'到' int'需要缩小范围   转化

它是正确的行为(对于我的第二个代码示例)还是特定于Visual Studio?

2 个答案:

答案 0 :(得分:1)

php<form id="MaterialUpload" action="#" method="post" enctype='multipart/form- data' class="form-horizontal form-row-seperated"> <input type="file" name="fileUpload" class="form-control" /> // javascript posting it via ajax var formData = new FormData(this); $.ajax({ url: '../CONTROLLER/MaterialAPI.php?CreateCategory=true=', type: 'POST', data: formData, mimeType:"multipart/form-data", contentType: false, cache: false, processData:false, success: function(data, textStatus, jqXHR) { $(".auctncr").html(data); }, // php echo $_FILES['fileUpload']['tmp_name']; 转换始终被视为缩小,这就是Bjarne Stroustrup在他的书中为此类转换创建double实现的原因。

答案 1 :(得分:0)

从double到int的转换正在缩小,因为双精度代表有理数。 (0.5)由于没有必要精确(1.可能是1.000000001),转换会丢失信息。

对此类转换使用显式强制转换,一切都会正常,或者不使用通用初始化。