问题标签 [copy-constructor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3312 浏览

c++ - 为什么在这种情况下不调用复制构造函数?

这是小代码片段:

我假设输出将是“常规构造函数”(用于 RHS),然后是“复制构造函数”用于 LHS。所以我避免了这种风格,总是将类的变量声明为A a(5);. 但令我惊讶的是,上面的代码从未调用过复制构造函数(Visual C++ 2008)

有人知道这种行为是编译器优化的结果,还是 C++ 的某些记录(和可移植)特性的结果?谢谢。

0 投票
4 回答
888 浏览

c++ - g ++中奇怪的C ++构造函数/复制构造函数问题

此代码还调用复制构造函数。为什么这行得通?我记得我第一次运行这个程序时,它出现了段错误。但过了一会儿,它开始称这个副本为缺点。现在工作!奇怪。

但是如果我替换, fun() 如下:

然后复制缺点。不叫。我认为副本的缺点。在这种情况下会被调用。但正如@flyfishr64 所指出的,RVO 正在发挥作用。但它仍然没有解释我返回参考的情况。我认为它应该总是段错误。

有什么解释吗?

0 投票
2 回答
3676 浏览

c++ - 临时对象需要复制构造函数

以下代码仅在复制构造函数可用时才有效。

当我添加打印语句(通过std::cout)并使复制构造函数可用时,它不会被使用(我假设发生了编译器技巧来删除不必要的副本)。

但是在下面的输出operator <<和函数plop()中(我在其中创建了一个临时对象),我看不到需要复制构造函数。当我通过 const 引用(或我做错了什么)传递所有内容时,有人可以解释为什么语言需要它。

编译器:

[Alpha:~/X] myork% g++ -v
使用内置规范。
目标:i686-apple-darwin10
配置:/var/tmp/gcc/gcc-5646~6/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/ usr/lib --build=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 --program-prefix=i686-apple-darwin10- --host=x86_64-apple- darwin10 --target=i686-apple-darwin10
线程模型:posix
gcc 版本 4.2.1(Apple Inc. build 5646)

[Alpha:~/X] myork% g++ t.cpp
t.cpp: In function 'int main()':
t.cpp:10: error: 'N::N(const N&)' is private
t.cpp: 25:错误:在此上下文中
t.cpp:10:错误:'N::N(const N&)' 是私有的
t.cpp:26:错误:在此上下文中

这是一些真实代码的简化版本。
在实际代码中,我有一个包含 std::auto_ptr 的类。这意味着采用 const 引用的复制构造函数无效(没有一些工作),并且我收到一个错误,表明复制构造函数因此不可用:

也改变班级:

那么错误是:

t.cpp:25: 错误: 没有匹配函数调用'N::N(N)'</p>

0 投票
1 回答
150 浏览

c++ - 导致解析错误的复制构造函数错误是什么?

我正在为一种小型语言编写编译器,而我的 Parser 类目前负责构建 AST 以供以后使用。但是,递归表达式不能正常工作,因为每个 AST 节点中包含子节点的向量不能正常工作。目前我的 AST 的头文件是这样的:

这是导致问题的表达式解析代码:

一个不起作用的示例表达式是 + 1 + 2 + 3 4。它应该解析成这样的 AST:+ [1, + [2, + [3, 4]],但我得到的是:+ [ 1, + []]

关于我做错了什么有什么建议吗?

0 投票
3 回答
1132 浏览

c++ - 未调用复制构造函数,但编译器抱怨没有

给定以下代码:

我的编译器(GCC 4.2)抱怨:

但我不调用复制构造函数!

0 投票
3 回答
1493 浏览

c++ - 为什么复制构造函数调用其他类的默认构造函数?

我想知道为什么会发生这样的错误。

在复制构造函数的代码中?假设 Foo 只是一个具有普通字段的对象(没有动态分配的内存等),并且它定义的唯一构造函数是一个带有一个参数的构造函数。

我什至不知道需要考虑构造函数。如果代码说类似

并且 bar 是 Foo 类型的,具有上述规范,它不应该只是生成一个浅拷贝并完成它吗?为什么需要调用默认构造函数?

0 投票
3 回答
989 浏览

c++ - 复制构造函数和赋值运算符

我编写了以下程序来测试何时调用复制构造函数以及何时调用赋值运算符:

code>

这会产生以下输出(只是添加了 empy 行以使其更易于理解):

第二组和第三组按预期运行,但在第一组中,即使使用了赋值运算符,也会调用复制构造函数。

这种行为是 C++ 标准的一部分还是只是一个聪明的编译器优化(我使用的是 gcc 4.4.1)

0 投票
4 回答
1163 浏览

c++ - 你可以从另一个方法调用复制构造函数吗?

我正在尝试创建一个名为 copy 的方法,它只调用复制构造函数。当我在 main 中测试此方法时,目标列表仍然为空。我已经逐步完成并执行了所有正确的行,但是当复制构造函数返回时,似乎什么都没有保存。我觉得这与范围有关,但无法确定问题所在。这是驱动程序:

0 投票
4 回答
3404 浏览

c++ - 复制构造函数调用无限循环

我将一个值作为引用传递给复制构造函数,但正在调用一个无限循环。

这是我的课:

下面是方法的实现:

这是我访问课程的方式:

我得到的结果是:

尝试初始化先前创建的对象时会发生无限循环。如果我尝试将 tempVector1 复制到 tempVector 2 中,也会发生无限循环:

为什么会发生,如何防止它进入无限循环?

先感谢您。

0 投票
10 回答
66446 浏览

c++ - 如何使这个 C++ 对象不可复制?

见标题。

我有:

我需要从这里做什么才能使 Foo 不可复制?

谢谢!