我正在读一本书,在这里,给出了这样的程序-
#include<fstream>
#include<string>
#include<vector>
int main()
{
string filename; // #1
cout << "Please enter name of file to open : ";
cin >> filename;
if(filename.empty())
{
cerr << "Something...";
}
ifstream inFile(filename.c_str()); // #2
if(!inFile)
{
cerr<< "Somthing...";
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
并且解释段说,声明语句显示声明的位置,这是这样解释的
声明语句出现在第一次使用定义对象的地方。
我对那句话很困惑,我无法理解它的实际含义。我需要用一些例子来解释。
我只是为我的程序编写一些代码,但最终我忘记写一个小符号并出错,请帮助理解这里有什么问题。
我想写的代码 -
int arr[3][2] = {with some values};
for(auto &i : arr) {
for(int j : i)
cout << j << " " ;
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
我不小心写的代码 -
int arr[3][2] = {with some values};
for(auto i : arr) { // just forgot to write (&) and got error
for(int j : i)
cout << j << " " ;
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
我知道的事情- 引用(“&”)运算符使我们能够更改循环本身内的值。
但是第二个循环中的错误是什么,我的意思是它可以一个一个地深度复制数组对象,并创建单独的对象,然后遍历它们,尽管我们将无法更改数组值本身。
我得到的错误- 'std::end' declared here 1244 | end(const valarray<_Tp>& __va)
我正在阅读这本书,它写道我们可以将一种类型的常量引用分配给任何其他类型的对象,原因是,内部编译器将Rvalue分配给与引用相同类型的对象,然后const引用被初始化为相同类型的对象,但是,如果这种类型的隐式转换有助于将常量引用分配给不同类型的对象,那么为什么不能隐式地进行相同的转换,因为对于这种显式转换。
#include<iostream>
using namespace std;
int main()
{
int a = 10;
double temp = (double)a;
double &x = temp;
cout << x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的工作方式相同,为什么它没有在编译器中预先配置?