小编Har*_*rma的帖子

c ++模板复制构造函数不可用或显式

我用模板复制构造函数编写了一个代码,以便更好地理解这个概念,因为我是新手,但下面的代码无法编译

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
class Grid
{
public:
    explicit Grid(size_t inWidth = kDefaultWidth, size_t inHeight = kDefaultHeight);
    virtual ~Grid();

    template <typename E>
    Grid(const Grid<T>& src);

    static const size_t kDefaultWidth = 10;
    static const size_t kDefaultHeight = 10;
    std::vector<std::vector<T>> mCells;
    size_t mWidth, mHeight;
};

template <typename T>
template <typename E>
Grid<T>::Grid(const Grid<T>& src)
{
    cout << "Copy constructor working " << endl;

}

int main()
{
    Grid<double> myDoubleGrid;
    Grid<double> newDoubleGrid(myDoubleGrid);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Visual …

c++

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

c ++:noskipws延迟某些数据类型的文件结束检测

据我所知noskipws,它禁止跳过白色空格.因此,如果他们想要使用,他们需要在他们的程序中使用一些char来获取空格noskipws.我尝试按+ (+ 对于Windows)设置cineof条件.但是如果我使用或输入,则使用单个输入将流设置为文件结尾.但是,如果我使用其他一些数据类型,则需要我按两次组合.如果我删除请求,其他一切正常.以下代码更准确地解释了问题:CtrlDCtrlZcharstringnoskipws

#include <iostream> 

using namespace std;

int main()
{
    cin >> noskipws; //noskipws request
    int number; //If this int is replaced with char then it works fine
    while (!cin.bad()) {
        cout << "Enter ctrl + D (ctrl + Z for windows) to set cin stream to end of file " << endl;
        cin >> number;
        if (cin.eof()) {
            break; // Reached end of …
Run Code Online (Sandbox Code Playgroud)

c++

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

C++:右值参考存储器

由于c ++提供了对rvalues的引用,即rvalue引用,它们主要用于执行移动语义和其他内存有效的任务.但是在下面的例子中,引用是改变文字的值,但是我们知道文字是只读的,所以引用如何改变某些只读变量的值.右值引用是否分配了它自己的内存,或者它只是改变了文字的值?

#include <iostream>
using namespace std;

int main()
{
    int a = 5;
    int&& b = 3;
    int& c = a;
    b++;
    c++;
    cout << " Value for b " << b << " Value for c " << c << endl;
}
Run Code Online (Sandbox Code Playgroud)

其次,当为临时对象分配引用时,引用将使用该对象的数据.但是根据临时对象的定义,它们会在使用它们的表达式结束时被删除.如果该临时对象内存不足,该引用如何作为该临时对象的别名?

c++ c++11

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

通过ESI和指针间接

我是程序集编程的新手(使用MASM的x86 asm),并且正在学习ESI寄存器支持的间接,您只需将地址放入ESI,然后使用间接运算符,您就可以访问指向的数据.

Q1.在编码中可以使用[esi + 4]但不能使用esi + 4(结果为错误).为什么?因为在汇编中,间接运算符([])显然不是必需的,主要是为了程序员的理解.

Q2.如果我将间接应用于指针变量,那么它们似乎不起作用.为什么?指针是否仅用作容器.

例如-

mov eax, [esi] ; It sets eax with the value of memory location pointed by esi

mov eax,[ptr4] ; Does not work the same
Run Code Online (Sandbox Code Playgroud)

x86 assembly

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

标签 统计

c++ ×3

assembly ×1

c++11 ×1

x86 ×1