繁体   English   中英

在 GitHub 上编译 TinyMT 时,不推荐使用隐式声明的 '...' [-Wdeprecated-copy]

[英]implicitly-declared ‘...’ is deprecated [-Wdeprecated-copy] in compiling TinyMT on GitHub

我在 StackOverflow 上研究过类似的问题,但我不知道该怎么做。

以下是我目前面临的错误(有些文本是日文的)。

$ make
g++ -Wall -Wextra -O3  -I../include  -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -o tinymt32dc tinymt32dc.cpp parse_opt.o -lntl
次のファイルから読み込み:  tinymt32dc.cpp:29:
../include/search_all.hpp: In instantiation of ‘bool tinymt::all_in_one<T, G, ST, STLSB, SG>::search(G&, ST*, STLSB*, bool) [with T = unsigned int; G = tinymt::tinymt32; ST = MTToolBox::search_temper<tinymt::tinymt32, unsigned int, 32, 1, 23, 6>; STLSB = MTToolBox::search_temper<tinymt::tinymt32, unsigned int, 32, 1, 9, 5, true>; SG = MTToolBox::Sequential<unsigned int>]’:
tinymt32dc.cpp:84:16:   required from here
../include/search_all.hpp:92:20: 警告: implicitly-declared ‘constexpr tinymt::tinymt32& tinymt::tinymt32::operator=(const tinymt::tinymt32&)’ is deprecated [-Wdeprecated-copy]
   92 |               rand = s.get_random();
      |               ~~~~~^~~~~~~~~~~~~~~~
次のファイルから読み込み:  tinymt32dc.cpp:31:
tinymt32search.hpp:151:9: 備考: because ‘tinymt::tinymt32’ has user-provided ‘tinymt::tinymt32::tinymt32(const tinymt::tinymt32&)’
  151 |         tinymt32(const tinymt32& src) : param(src.param) {
      |         ^~~~~~~~
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: -lntl が見つかりません: No such file or directory
collect2: エラー: ld はステータス 1 で終了しました
make: *** [Makefile:23: tinymt32dc] エラー 1

我不确定我应该解决什么问题。

我正在编译一个名为“TinyMT”的程序,您可以在下面的 URL 中看到源代码。

https://github.com/MersenneTwister-Lab/TinyMT

我的环境是 Cygwin,带有以下软件包(由 Cygwin 安装)。

  • 雪儿 1.4-1
  • gcc 核心 11.3.0-1
  • gcc-g++ 11.3.0-1
  • gmpc 11.8.16-3
  • libgmp-devel 6.2.1-2
  • libgmpxx4 6.2.1-2
  • 压缩包 1.19-1
  • m4 1.4.19-1
  • 制作 4.3-1
  • perl 5.32.1-2

(我记得自己安装的)

警告说tinymt32 class 有一个用户定义的复制构造函数,但没有定义复制赋值运算符。 这违反了三/五规则,表明管理tinymt32可能持有的任何资源存在潜在问题。

所以这个警告不是针对图书馆的用户,而是它的作者忘记定义operator=或至少将其标记为默认值。

如果您想修复该 class,请执行此操作。 如果默认operator=足够,请将其default -ed 定义添加到 class。 如果您不想修改库的代码,您可以做的不多,也许至少看看调用这个默认实现是否安全。

从我非常简短的代码来看,它看起来就像复制 ctor 重置了reverse_bit_flag而隐式/默认operator=将从源中复制它,不确定这有多相关。 但是 class 只存储值,没有需要特别注意的资源,因此代码应该是相当安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM