16得票2回答
构造函数初始化列表没有调用复制构造函数

我正在学习构造函数初始化列表,我编写了以下代码: class Mango { public: Mango(){cout<<"Mango::ctor()";} Mango(const Mango& other){cout<<"Mango::copy...

13得票3回答
编译器能够省略以下复制吗?

我还是一名新手程序员,我知道过早优化不好,但我也知道大量复制东西也不好。 我已经了解了关于复制省略及其同义词的内容,但是例如维基百科上的例子让我感觉只有在要返回的对象同时被完全构造时才会进行复制省略。 那么对于像向量这样的对象呢?通常情况下,只有填充了一些内容后,它们才有意义,作为返回值使用时...

11得票2回答
为什么使用std::tuple时不能保证复制省略?

我预期在C++20中,以下代码在打印A和B之间不会输出任何内容(因为我预期有保证的RVO会发生)。但实际输出为: A Bye B C Bye Bye 因此可以推断出一个临时对象被创建了。#include <iostream> #include <tuple> str...

7得票4回答
是否可能确保复制省略?

复制省略是一种巧妙的优化技术,在某些情况下,依靠复制省略实际上比手动传递引用更快。 因此,假设您已经确定了一个关键代码路径,您依赖于编译器对代码路径执行复制省略以实现最大性能。 但现在您依赖于编译器优化。 是否有任何(特定于编译器的)方法可以确保实际执行复制省略,并让编译器(或其他工具)...

12得票2回答
不使用 std::move 如何按值返回 unique_ptr?

std::unique_ptr<int> ptr() { std::unique_ptr<int> p(new int(3)); return p; // Why doesn't this require explicit move using st...

11得票1回答
复制/移动省略需要明确定义复制/移动构造函数。

考虑以下程序: #include <iostream> #include <utility> class T { public: T() { printf("address at construction: %zx\n", (uintptr_t)thi...

11得票2回答
初始化列表中的复制构造函数

我正在探索std::intializer_list的丑陋世界。 据我从标准中了解到: § 11.6.4: 5.从初始化列表构造std :: initializer_list类型的对象,就像实现生成并实现了“N个const E数组”的prvalue一样,在这个数组的每个元素上都会进行复制初...

17得票2回答
C++17中非可复制变量的成员初始化

当对于不可复制的变量(例如 std::atomic<int>)进行成员初始化时,根据这里的答案,需要使用直接初始化而不是拷贝初始化。然而,当我在g++ 7.4.0中开启-std=c++17时,后者似乎也能正常工作。 #include <atomic> class A ...

11得票1回答
为什么即使有删除的复制构造函数,std::atomic也能在C++17中编译?

我有一个简单的代码:#include <atomic> int main() { std::atomic<int> a = 0; } 这段代码使用 -std=c++17 编译通过,但是使用 -std=c++14 和 -std=c++11 会编译失败。 使用已...

10得票2回答
标准是否规定副本必须相等?

假设我有一种奇怪的字符串类型,它要么拥有其底层缓冲区,要么不拥有: class WeirdString { private: char* buffer; size_t length; size_t capacity; bool owns; public: ...