在构造函数中复制静态数组

Copy static array in constructor

提问人:lightxbulb 提问时间:10/17/2019 更新时间:10/17/2019 访问量:304

问:

是否有编译时表达式来复制对象构造函数中的数组?默认构造函数使用什么?我想要这样的东西:

struct A
{
    int arr[100];
    // I want something like this:
    A(const A& arg) : arr{arg.arr...} {}
    // what I use at the moment (a compile time loop):
    A(const A& arg)
    {
        static_for<0, N>([&](auto i) { arr[i] = arg.arr[i]; });
    }
};

我不想使用 ,并且我在 copy ctor 中有一些调试信息,所以我不能依赖默认的。std::array

C++ 数组 复制构造函数 17 C +20

评论

3赞 Algirdas Preidžius 10/17/2019
"我不想使用 std::array“ 为什么?它完全符合您的需求。
1赞 Yksisarvinen 10/17/2019
在标准标头中定义?如果编译器具有任何不是保留标识符的宏,则应为该编译器提交 bug。如果在代码中使用保留标识符,请停止。使用保留标识符是 UB。
1赞 Jesper Juhl 10/17/2019
@lightxbulb 这听起来不对/不太可能/误解了。什么定义?什么“超出命名空间”的东西?
1赞 Yksisarvinen 10/17/2019
预处理器宏不能位于任何命名空间中,它们在不考虑命名空间的情况下被解析。这是一个简单的“查找和替换”机制。我们知道找到这样的东西并不好,但它要么是编译器中非常严重的错误,要么是代码中的问题。实际上,我从未听说过将宏定义为保留标识符的编译器。如果您的任何名称符合保留标识符(上面链接)的标准,则这是您的错,而不是标准标头的错。
2赞 Jesper Juhl 10/17/2019
@lightxbulb 好吧,随便吧。由于命名空间的笨拙原因,继续使用原始的东西来代替好东西。这是你的选择。就我个人而言,在 MacOS、Linux、Windows、AiX 和 FreeBSD 上,我在 GCC、clang、xcode、Visual Studio 上从未遇到过问题。但可以肯定的是,做你的事..<array>

答:

5赞 darune 10/17/2019 #1

AFAIK,如果我正确理解您是如何构建问题的,那么现在只有基于循环的解决方案 - 至少到目前为止

开始,有constexprcopy_n

其他用户应该只使用适当的容器:std::array