小编duk*_*ver的帖子

声明地点是什么意思?

我正在读一本书,在这里,给出了这样的程序-

#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)

并且解释段说,声明语句显示声明的位置,这是这样解释的

声明语句出现在第一次使用定义对象的地方。

我对那句话很困惑,我无法理解它的实际含义。我需要用一些例子来解释。

c++ declaration statements

6
推荐指数
1
解决办法
101
查看次数

如果在 foreach 循环中没有写“&amp;”,为什么会出错?

我只是为我的程序编写一些代码,但最终我忘记写一个小符号并出错,请帮助理解这里有什么问题。

我想写的代码 -

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)

c++ arrays foreach loops c++11

1
推荐指数
1
解决办法
80
查看次数

为什么非 const 引用不能初始化为不同类型的对象?

我正在阅读这本书,它写道我们可以将一种类型的常量引用分配给任何其他类型的对象,原因是,内部编译器将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)

它的工作方式相同,为什么它没有在编译器中预先配置?

c++ reference implicit-conversion explicit-conversion

0
推荐指数
1
解决办法
83
查看次数