目前我正在自学C++ Primer 5th.这是我不确定的事情.(我在FAQ上找不到确切的相关问题).
考虑这个while循环:
while(std::cin>>value){...} \\value here was defined as int.
Run Code Online (Sandbox Code Playgroud)
教科书上写道:
该表达式从标准输入中读取下一个数字,并将该数字存储在值中.输入运算符(第1.2节,第8页)返回其左操作数,在本例中为std :: cin.因此,这个条件测试std :: cin.当我们使用istream作为条件时,效果是测试流的状态.如果流是有效的 - 也就是说,如果流没有遇到错误 - 则测试成功.
我的问题是:首先std::cin读入输入value然后测试验证std::cin,或std::cin首先测试然后决定是否读入'值'?当它"返回它的左操作数"时,我很困惑.
目前我正在自学 C++ 入门第 5 版。文中说:
当与内置类型的变量一起使用时,这种初始化形式有一个重要的特性:如果初始化程序可能导致信息丢失,编译器不会让我们列出内置类型的初始化变量:
这是示例代码:
long double ld = 3.1415926536;
int a{ld}, b = {ld}; // error: narrowing conversion required
int c(ld), d = ld; // ok: but value will be truncated
Run Code Online (Sandbox Code Playgroud)
但是当我自己在 C++shell 上尝试时:
long double a=3.14159265354;
int b(a);
int c{a};
std::cout<<a<<std::endl<<b<<std::endl<<c<<std::endl;
Run Code Online (Sandbox Code Playgroud)
它只是发出警告,-Wnarrowing但程序已成功执行。为什么?
我看过很多关于绑定const引用到rvalue的FAQ帖子.有人说这是因为系统生成一个临时对象供参考绑定,有些人说它只是一个抽象的系统规则,它可能并没有真正做到这一点.那么我应该遵循哪一方?有人可以解释将const引用绑定到右值的真正机制,或者只是简单地找到一个相关的并确认准确的链接.提前谢谢了!!
我被困在C++ Primer中的一段代码中并且已经考虑了超过1小时.代码是
for (auto row : ia)//should use &row here
for (auto col : row)
Run Code Online (Sandbox Code Playgroud)
对它的解释是
我们这样做是为了避免正常的数组转换为指针.因为row不是引用,所以当编译器初始化row时,它会将每个数组元素(与数组类型的任何其他对象一样)转换为指向该数组的第一个元素的指针.因此,在此循环中,行的类型为int*.内部for循环是非法的.尽管我们有意图,但该循环尝试迭代int*.
我知道每次做迭代都与迭代有关for(auto col:row).我无法理解的
我们这样做是为了避免正常的数组到指针转换"
是什么是我们为外循环传入的"ia"的形式?它应该是指向其第一个元素的地址而不是"具体"数组的指针吗?那么内循环有什么不对?我认为它应该是与外循环相同的机制..我无法理解Q&A上的帖子.请有人赐教......我的理解有什么不对......也欢迎一个好的链接!提前谢谢了!
ia的声明是
constexpr size_t rowCnt = 3, colCnt = 4;
int ia[rowCnt][colCnt]; // 12 uninitialized elements
// for each row
for (size_t i = 0; i != rowCnt; ++i) {
// for each column within the row
for (size_t j = 0; j != colCnt; ++j) {
// assign the element's positional index as its value
ia[i][j] = …Run Code Online (Sandbox Code Playgroud) 目前我正在自学C++.
C++入门说:
cout << "hi!" << ends; //writes hi and a null, then flushes the buffer
Run Code Online (Sandbox Code Playgroud)
但是C++标准库第二版说:
ends: Outputs '\0'
Run Code Online (Sandbox Code Playgroud)
而cplusplus上的引用也没有提到刷新缓冲区.
那么我应该遵循哪一个?
int ia[] = {0,1,2,3,4,5,6,7,8,9}; // ia is an array of ten ints
auto ia2(ia); // ia2 is an int* that points to the first element in ia
ia2 = 42; // error: ia2 is a pointer, and we can't assign an int to a pointer
Run Code Online (Sandbox Code Playgroud)
这是关于C++ Primer的一段代码.有人可以向我解释第二行是什么意思.这是一种初始化方式吗?我在哪里可以找到这种初始化?我搜索了很多但仍然无法获得相关信息.也欢迎链接.非常感谢!