小编Ray*_*Ray的帖子

使用()或{}在现代C++(C++ 11及更高版本)中正确初始化变量?

C++参考页说,()是用于值初始化,{}为值和骨料和列表的初始化.那么,如果我只想要值初始化,我会使用哪一个?() 要么 {}?我问,因为在Bjarne本人的"A Tour of C++"一书中,他似乎更喜欢使用{},即使是价值初始化(例如参见第6页和第7页),所以我认为总是好的做法使用{},即使是值初始化.但是,我最近被以下的bug严重咬了.请考虑以下代码.

auto p = std::make_shared<int>(3);
auto q{ p };
auto r(p);
Run Code Online (Sandbox Code Playgroud)

现在根据编译器(Visual Studio 2013),q有类型std::initializer_list<std::shared_ptr<int>>,这不是我想要的.我实际想要的q实际上是什么r,是什么std::shared_ptr<int>.因此,在这种情况下,我应该使用{}进行初始化值,但使用().鉴于此,为什么Bjarne在他的书中似乎仍然倾向于使用{}进行价值初始化?例如,他double d2{2.3}在第6页的底部使用.

要明确回答我的问题,我应该何时使用(),何时应该使用{}?这是语法正确性还是良好的编程习惯问题?

哦,呃,如果可能的话,请说明文.

编辑:似乎我略微误解了价值初始化(见下面的答案).然而,上述问题仍然存在.

c++ initialization c++11

43
推荐指数
4
解决办法
3207
查看次数

使用PyCharm和Git时,我应该忽略.idea文件夹吗?

我在PyCharm中阅读了Git集成,并从PyCharm创建了一个Git存储库.我在PyCharm中这样做是因为我希望PyCharm知道.idea文件夹是否应该被忽略,如果是这样的话,它会自动创建一个.gitignore带有该行的文件.idea/.

但它没有,所以我认为我不应该忽视这个.idea问题.但是,我做了一个快速搜索,发现某人的示例.gitignore文件,这里显然忽略了该.idea文件夹.

所以,我的问题是,.idea文件夹是否应该被忽略?

python git pycharm

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

在vim中打开文本

当人们想要将文本从Vim复制到其他东西时,例如网络浏览器,下面的问题是相关的.

我通常可以tw=80选择编辑文件,特别是LaTeX文件.但是,假设我想在Vim中使用该tw=80选项撰写电子邮件,然后我想将其复制并粘贴到Web浏览器中.在复制和粘贴之前,我想打开文本,以便每80个字符左右没有换行符.我曾尝试tw=0,然后gq,但这只是包装文本的80个字符的默认宽度.我的问题是,如何解开文字,以便我的电子邮件的每一段都显示为一行?对此有简单的命令吗?

vim

28
推荐指数
3
解决办法
8469
查看次数

将一个键映射到vim中的多个命令

据我所知,为了在一行中执行多个命令,例如保存和执行pdflatex,我可以执行以下操作.

:w | !pdflatex %:t
Run Code Online (Sandbox Code Playgroud)

请注意,它%:t 为您提供当前文件名(没有路径).此代码在Vim中正常工作.现在,如果我想将上面的所有内容映射到ctrl + shift + F6,我希望能够做到以下几点

:nnoremap <C-S-F6> :w | !pdflatex %:t<CR>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,并给我以下错误.

:!pdflatex paper.tex<CR>
/bin/bash: -c: line 0: syntax error near unexpected token `newline'
/bin/bash: -c: line 0: `pdflatex paper.tex<CR>'
Run Code Online (Sandbox Code Playgroud)

这是否意味着我无法将ctrl + shift + F6映射到所需的功能,保存并执行pdflatex?我该怎么做才能解决这个问题?

vim

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

C++,在实现函数`int next(std :: string param)`时出现奇怪的编译器错误

我被以下代码严重咬了,我浪费了很多宝贵的时间.

#include<string>

int next(std::string param){
    return 0;
}

void foo(){
    next(std::string{ "abc" });
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下编译器错误(在Visual Studio 2013上):

1>------ Build started: Project: sandbox, Configuration: Debug Win32 ------
1>  test.cpp
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C2039: 'iterator_category' : is not a member of 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'
1>          c:\users\ray\dropbox\programming\c++\sandbox\test.cpp(8) : see reference to class template instantiation 'std::iterator_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>' being compiled
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C2146: syntax error : missing ';' before identifier 'iterator_category'
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C4430: …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors msvc12

22
推荐指数
3
解决办法
2969
查看次数

Visual Studio Code 跨文件搜索(在文件中查找)不起作用

MacOS 10.13.6 Visual Studio 代码 1.31.1

我打开 VSCode,打开一个文本文件文件夹,然后按 command-option-F,或使用“编辑”->“在文件中查找”,我搜索我确定存在于多个文本文件中的字符串打开的文件夹,它说找不到它,除非我在选项卡中打开了文件,这违背了这一点。我究竟做错了什么?还有其他人有同样的问题吗?

编辑

如果我打开文件夹并将每个文件作为选项卡打开则跨文件搜索有效,这是毫无意义的。有没有一种方法可以跨文件进行搜索,而无需将它们全部作为选项卡打开?

编辑,TLDR,答案:

我想是因为我在 Google Drive File Stream 上打开了一个文件夹。它在本地文件上运行良好。

visual-studio-code

18
推荐指数
6
解决办法
1万
查看次数

Notepad ++,查看保存的运行命令的作用

我知道如何使用"Run-> Run"或F5自动运行命令.我知道如何使用快捷方式保存命令.我的问题是,鉴于我已经保存了一个带有快捷方式的命令,现在它出现在我的"运行"菜单中,并且我忘记了我在其中输入的命令,如何运行,我该如何查看它是?如果我使用"运行 - >修改快捷方式/删除命令...",似乎我只能更改快捷方式,但无法检查命令的位置.

notepad++

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

PyCharm,什么是python_stubs?

我有很多问题,PyCharm无法正确识别库中的函数,所以我决定查看PyCharm错误识别的一些示例函数的源代码.例如,PyCharm无法pickle.load()正确识别; 它认为pickle.load()不采取任何论据,实际上它确实需要一个论点.我在这里问了这个问题.所以我写了以下简短的测试代码.

import pickle


r = range(10)
f = open("../temp/pickling_example.pkl", "wb")
pickle.dump(r, f)
f.close()
f = open("../temp/pickling_example.pkl", "rb")
pickle.load(f)
print(r)
Run Code Online (Sandbox Code Playgroud)

我压Ctrl+Bpickle.load(f),倒数第二行.我希望这会将我带到包含定义的源文件pickle.load(),但它将我带到该位置的文件中C:\Users\ray\.PyCharm30\system\python_stubs\-1442825926\_pickle.py.该文件包含以下摘要(请参见下面的屏幕截图).

在这里你可以看到PyCharm错误识别签名问题的根源pickle.load(); pickle.load()根据此文件的签名没有参数.

有人可以解释为什么我被带到这里,这个文件是什么,python_stubs文件夹(更确切地说C:\Users\ray\.PyCharm30\system\python_stubs\)是什么?

我的猜测如下.我被带到这个位置的文件,因为PyCharm找不到pickle.load()我的计算机上定义的实际源代码.在这些情况下,PyCharm只生成一个虚拟文件,其中只包含所用函数的声明(或只是签名),在本例中为pickle.load().这个文件是我自小就当我按Ctrl+Bpickle.load().这个文件的目的纯粹是为了让PyCharm的检查工作正常并且可以提供自动完成,PyCharm将所有这些文件放在python_stubs目录中.该pickle.load()函数的实际定义是在我的目录中的某个文件pycpyd文件中C:\Python34\,并且我没有py包含定义的实际文件,pickle.load()因为当我安装Python时,我没有安装源代码.

问题:

(1)我的猜测大致正确吗?你能提供更正确和准确的吗?

(2)如何防止PyCharm错误地识别或不识别库函数?我应该确保我总是安装Python的源代码和所有第三方软件包,以确保PyCharm可以正确地进行检查吗?

(3)如果我是对的,PyCharm生成这些文件,PyCharm如何猜测函数的签名?

python pycharm

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

在OpenCV的背景下,什么是`ippicv`?

在CentOS上构建OpenCV 3.1.0时,我遇到了一个由调用文件引起的哈希不匹配错误ippicv_linux_20151201.tgz.经过一些研究后,我发现几个人(例如这里)提出的两个主流解决方案如下.

  1. 使用选项再次构建-DWITH_IPP=OFF.
  2. 手动下载文件ippicv_linux_20151201.tgz并将其放在正确的位置.

现在上面的解决方案2对我来说不起作用,我对解决方案感到有点紧张1.我担心构建OpenCV -DWITH_IPP=OFF可能会阻止某些事情在以后正常工作,从而制造定时炸弹.我的问题是什么是IPP?还是ippicv?还是ICV?我甚至不确定在这里要问什么.我想在禁用它之前知道我要在构建中禁用的内容.

opencv opencv3.1

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

在支持超线程的四核CPU上运行的单CPU程序

我是统计模式识别的研究员,我经常运行运行很多天的模拟.我正在使用Linux 3.2.0-24-generic运行Ubuntu 12.04,据我所知,它支持多核和超线程.使用带有HTT的英特尔酷睿i7 Sandy Bridge Quadcore,我经常同时运行4次模拟(需要很长时间的程序).在我提出问题之前,我已经(我想)知道的事情.

  • 我的操作系统(Ubuntu 12.04)由于超线程而检测到8个CPU.
  • 我的操作系统中的调度程序非常聪明,从不安排两个程序在属于同一物理内核的两个逻辑(虚拟)内核上运行,因为操作系统支持SMP(同时多线程).
  • 我已阅读有关超线程的维基百科页面.
  • 我已经阅读了Sandy Bridge上的HowStuffWorks页面.

好的,我的问题如下.当我在我的计算机上同时运行4个模拟(程序)时,它们每个都运行在一个单独的物理核心上.但是,由于超线程,每个物理核心被分成两个逻辑核心.因此,每个物理内核是否只使用其全部容量的一半来运行我的每个模拟?

非常感谢你提前.如果我的问题的任何部分不清楚,请告诉我.

hyperthreading

13
推荐指数
2
解决办法
7959
查看次数