相关疑难解决方法(0)

为什么缩小使用花括号分隔初始值设定项的转换会导致错误?

我在"C++编程语言"第4版中学习了大括号分隔初始化器.>第2章:C++之旅:基础知识.

我引用下面的书.

=表格是传统的并且可以追溯到C,但是如果有疑问,请使用通用{} -list表单(第6.3.5.2节).如果不出意外,它可以帮助您避免丢失信息的转换(缩小转化次数;§10.5):

int i1 = 7.2;    // i1 becomes 7
int i2 {7.2};    // error : floating-point to integer conversion
int i3 = {7.2};  // error : floating-point to integer conversion (the = is redundant)
Run Code Online (Sandbox Code Playgroud)

但是,我无法重现这些结果.

我有以下代码.

#include <iostream>

int main()
{
    int i1 = 7.2;
    int i2 {7.2};
    int i3 = {7.2};

    std::cout << i1 << "\n";
    std::cout << i2 << "\n";
    std::cout << i3 << "\n";
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,我没有得到任何错误.我收到警告,std=c++11但没有错误.

$ g++ init.cpp 
init.cpp: In function …
Run Code Online (Sandbox Code Playgroud)

c++ narrowing c++11

13
推荐指数
2
解决办法
1267
查看次数

使用-1作为unsigned(size_t)类型的标志值

我使用-1作为返回类型为size_t(无符号类型)的函数的标志值.

我一开始并没有注意到它,特别是因为它没有导致我的代码中的任何错误(我用x == -1,而不是x <0来检查它).

是否有任何微妙的原因我不应该留下它?什么时候这可能出乎意料?这是常用的吗?

ptrdiff_t不太常见,输入时间较长,而且无论如何它都不是合适的类型,因为函数会将索引返回到数组中.

c c++ d twos-complement

9
推荐指数
2
解决办法
1494
查看次数

标签 统计

c++ ×2

c ×1

c++11 ×1

d ×1

narrowing ×1

twos-complement ×1