小编cdm*_*dmh的帖子

何时重载通过引用(l值和r值)优先传递给值?

我已经看到它说一个operator=带有相同类型by-value的参数的文件在C++ 11中既作为复制赋值运算符又作为移动赋值运算符:

Foo& operator=(Foo f)
{
    swap(f);
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

替代方案的重复次数将超过两倍,并且可能出现错误:

Foo& operator=(const Foo& f)
{
    Foo f2(f);
    swap(f2);
    return *this;
}

Foo& operator=(Foo&& f)
{
    Foo f2(std::move(f));
    swap(f2);
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

在什么情况下,ref-to-const和r-value重载优先通过值,或何时需要?我正在考虑std::vector::push_back,例如,它被定义为两个重载:

void push_back (const value_type& val);
void push_back (value_type&& val);
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,pass by value 用作复制赋值运算符和移动赋值运算符,无法push_back在Standard中定义为单个函数?

void push_back (value_type val);
Run Code Online (Sandbox Code Playgroud)

c++ overloading assignment-operator copy-and-swap c++11

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

将存储库克隆到GitHub

我一直在本地使用git,并拥有一个完整的更改历史记录的私有存储库等.我现在想在GitHub上分享这个,所以我需要从我的本地repo克隆到一个新的GitHub仓库.我找不到任何办法这样做.如何将我的所有历史记录都放到GitHub上?

git github git-clone

21
推荐指数
2
解决办法
1万
查看次数

为什么MSVC 2010 32bit项目链接到64bit kernel32.dll?

我有一个Win32(32位)DLL项目,它可以无错误地构建和链接.DLL无法加载到32位进程.使用DependencyWalker,我看到DLL是32位,但已经与KERNEL32,msvcr100d,WS2_32和msvcr100 64位库链接.

DependencyWalker也显示错误

Error: Modules with different CPU types were found.
Run Code Online (Sandbox Code Playgroud)

我已经对这个问题感到困惑了几个小时了,而且无法理解它 - 有没有其他人经历过这个问题,并找到了解决方案?

linker visual-studio-2010 32bit-64bit visual-c++

10
推荐指数
2
解决办法
5297
查看次数

FlannBasedMatcher返回不同的结果

使用FlannBasedMatcherOpenCV,使用相同的参数调用匹配器会得到不同的结果。有人可以建议我做错了吗?

下面的代码显示了我遇到的问题的一个最小示例-简化了代表我的用法FlannBasedMatcher-这不是真正的代码:)

每次循环输出的结果应相同,但不相同。

    int const k = std::min(query_descriptors.rows,
                      std::min(train_descriptors.rows, 2));

    cv::Mat query_descriptors_original = query_descriptors.clone();
    cv::Mat train_descriptors_original = train_descriptors.clone();
    for (int loop=0; loop<2; ++loop)
    {
        cv::FlannBasedMatcher matcher;
        matcher.add(std::vector<cv::Mat>(1, train_descriptors));

        std::vector<matches_t> knnMatches;
        matcher.knnMatch(query_descriptors,  knnMatches, k);

        matches.clear();
        for (auto const &knn : knnMatches)
        {
            matches.push_back(knn[0]);
            std::cout << knn[0].queryIdx << ',' << knn[0].trainIdx << '\n';
        }
        std::cout << '\n';

        assert(cv::countNonZero(query_descriptors != query_descriptors_original) == 0);
        assert(cv::countNonZero(train_descriptors != train_descriptors_original) == 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然我认为输出不会有帮助(?),但输出是

0,27
1,170
2,100
3,100
4,123
5,100
6,191
7,71 …
Run Code Online (Sandbox Code Playgroud)

c++ opencv flann flannbasedmatcher

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

C++ range-for和boost :: irange

我正在使用boost::irange并创建了一个辅助函数,通过消除对显式模板参数的需要来简化代码.我不明白为什么它不起作用.这是代码:

#include <iostream>
#include <boost/range/irange.hpp>

template<typename T>
boost::irange<T> range_from_zero(T limit)
{
    return boost::irange<T>(T(), limit);
}

int main() {
    size_t end = 100;
    for (auto i  : range_from_zero(0,end))
        std::cout << i << ' ';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里有一个实时版本https://ideone.com/VVvW6e,它会产生编译错误

prog.cpp:5:8: error: 'irange<T>' in namespace 'boost' does not name a type
 boost::irange<T> range_from_zero(T limit)
        ^
prog.cpp: In function 'int main()':
prog.cpp:12:41: error: 'range_from_zero' was not declared in this scope
     for (auto i  : range_from_zero(0,end))
Run Code Online (Sandbox Code Playgroud)

如果我boost::irange直接在范围中使用,那么它可以工作:

#include <iostream> …
Run Code Online (Sandbox Code Playgroud)

boost c++11

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

c64Round()中的x64舍入不一致(_mm_cvtsd_si32)

在使用MSVC2013的x64 Windows上,我使用的cvRound是OpenCV 的功能,目的是从x.5值向上舍入.我遇到了一个不一致的cvRound(17.5f)回报18(好!),但cvRound(20.5f)回报20并没有21像预期的那样

因此简单地实现了cvRound,所以它似乎是微软的不一致_mm_cvtsd_si32().

int  cvRound( double value )
{
    __m128d t = _mm_set_sd( value );
    return _mm_cvtsd_si32(t);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何/为什么这样做?

FWIW,cvRound(20.5f + 1e-3f)返回21.

c++ opencv rounding-error visual-c++

3
推荐指数
2
解决办法
746
查看次数

Makefile 错误导致对符号“GOMP_parallel@@GOMP_4.0”的未定义引用

警告:新手 Ubuntu/g++/makefile 用户

我正在尝试构建一个 C++ 应用程序(C++11、OpenMP、OpenCV3、实验性文件系统),如果我直接构建它就可以工作,但如果我使用makefile带有链接器错误的则失败。

这有效:

g++ \
-std=c++11 -std=c++1y -fopenmp -DNDEBUG \
-O3 -fprofile-generate -march=native -fomit-frame-pointer \
docproc.cpp \
-flto -L/usr/local/lib -lstdc++fs \
-lpthread -lboost_thread -lboost_system \
-lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_fuzzy -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_photo -lopencv_plot -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto
Run Code Online (Sandbox Code Playgroud)

但是我makefile产生了这个,并且失败了:

g++ -g -L/usr/local/lib -o docproc docproc.o taina.o logging.o \ …
Run Code Online (Sandbox Code Playgroud)

c++ makefile g++ ld opencv3.1

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

SolrCloud 5和Zookeeper配置上传

我正在使用Zookeeper配置SolrCloud,但我很难在ZK上加载配置.

我的步骤:

  1. 配置3 ZK的集合,我看到1个领导者和2个粉丝
  2. 配置一个由2个SolrCloud组成的小集群,该集群按以下方式启动 /bin/solr start -c -z <ip1>:2181,<ip2>:2181,<ip3>:2181 -noprompt
  3. 然后我尝试使用zkCli.sh在ZK上加载配置:( ./bin/zkCli.sh -zkhost <ip1>:2181,<ip2>:2181,<ip3>:2181 -cmd upconfig -confname config1 -confdir /folder/with/schema.xml它来自solr standalone)
  4. 使用API​​创建Solr集合 http://<solr_ip>:8983/solr/admin/collections?action=CREATE&name=collection_test&numShards=2&replicationFactor=2&maxShardsPerNode=2
  5. 使用zkCli.sh再次将配置链接到集合 ./bin/zkCli.sh -zkhost 127.0.0.1:2181 -cmd linkconfig -collection collection_test -confname config1

此时我应该看到配置已加载但没有任何反应.

solr solrcloud apache-zookeeper

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