通用且统一的初始化:从“double”到“int”
universal and uniform initialization: `double` to `int`
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
即通用和统一初始化可以在编译模式下检查值(从int
到char
)。Bjarne Stroustrup在他的书中提到了这个案例。
我原以为情况double
到int
是这样的,但它不适用于Visual Studio 2015更新3:
constexpr double cd {4.0};
int i1 {cd}; // compilation error
错误消息:
C2397从"double"到"int"的转换需要缩小转换
它是正确的行为(对于我的第二个代码示例)还是特定于Visual Studio?
double
到int
的转换总是被认为是缩小的,这就是为什么Bjarne Stroustrup在他的书中为这种类型的转换创建了narrow_cast<>
实现。
对这样的转换使用显式强制转换,一切都会好起来,或者不使用通用初始化。
相关文章:
- C++在数学计算中将double转换为int
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 进程为包含double但不包含int的模板返回了-103741819(0xC0000005)
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- 重载函数 int vs double
- 如何修复 E2015 "ambiguity between pow(double,double) and pow(float,int)"
- 未定义模板'std::__1::function<int (double, double, double, double)>'的隐式实例化
- C++ - extern int (double)
- 在向量中存储模板化对象(在<int><double>单个向量中存储类、类)
- 有没有办法<int><double>在使用 C++11 函数调用期间自动将"向量"提升为"向量"?
- 获取系统时间(以毫秒为单位)作为int/double
- 如何使用非法名称(例如 "int double = 0")声明变量?
- 从文件中读取数据类型string, int double.将每一行数据放入对象向量中
- c-string和(int,double,float)之间的动态分配
- 英特尔C++错误:"pair"不是非静态数据成员或类"std::pair<const int, double>"的基类
- C/ c++: do内置对象,如' int ' ' double '在程序运行期间始终保持在内存中的确切位置
- 一个如何实现string和long, int, double模板函数的建议
- 对于最简单的类型,我应该使用boost::optional来表示可以为null的int double等吗
- 映射和节点,错误智能感知:不存在从"const std::pair<const int, double>"到"Node"的合适用户定义转换