小编qua*_*ana的帖子

重复的c ++模板实例化

编译器是否可以跨多个翻译单元复制同一模板的实例化?

例如,如果你有一个使用std:vector<int>函数内部的a.cpp,而b.cpp使用同样的东西,那么std::vector<int>在最终的二进制文件中有两次冒险吗?

c++ templates

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

g ++ c ++ 11 constexpr评估性能

g ++(4.7.2)和类似版本似乎在编译期间以惊人的速度评估constexpr.事实上在我的机器上比运行时编译的程序快得多.

这种行为有合理的解释吗?是否存在仅在编译时适用的优化技术,可以比实际编译的代码更快地执行?如果是这样,哪个?

这是我的测试程序和观察结果.

#include <iostream>

constexpr int mc91(int n)
 {

     return (n > 100)? n-10 : mc91(mc91(n+11));

 }

constexpr double foo(double n)
{
   return (n>2)? (0.9999)*((unsigned int)(foo(n-1)+foo(n-2))%100):1;
}

constexpr unsigned ack( unsigned m, unsigned n )
{
    return m == 0
        ? n + 1
        : n == 0
        ? ack( m - 1, 1 )
        : ack( m - 1, ack( m, n - 1 ) );
}

constexpr unsigned slow91(int n) {
   return mc91(mc91(foo(n))%100);
}

int main(void) …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr

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

无法在Jenkins中运行python脚本

我已经使用Jenkins几年了,最近买了一台新的Windows 10 PC.我安装了Jenkins 2.89.2,Visual Studio 2017和Python 3.6,并从我以前的Windows 7 PC复制了几个Jenkins作业.

我遇到的问题是自由式Jenkins作业中的所有python脚本现在什么都不做.

我有类似的命令行批处理文件,它们运行这些python脚本,可以在新PC上的命令窗口中正常工作.

我还检查了文件关联ftype,最后更改了它:

ftype Python.File
Python.File="D:\Python36_64\python.exe" "%L" %*
Run Code Online (Sandbox Code Playgroud)

我的解决方法是这样的:

在Windows 7下工作的示例行:

CreateBuildNumber.py <=使用PATH查找此文件,然后使用文件关联来运行python

替换行需要在Windows 10下工作:

python .\Scripts\CreateBuildNumber.py <=使用PATH查找python.

如何避免脚本中的显式路径?

更新:

D:\project>assoc | findstr -i python
.py=Python.File
.pyc=Python.CompiledFile
.pyd=Python.Extension
.pyo=Python.CompiledFile
.pyw=Python.NoConFile
.pyz=Python.ArchiveFile
.pyzw=Python.NoConArchiveFile

echo %PATH%
D:\Python36_64;D:\Python36_64\Scripts;.\Scripts;"C:\Program Files\CppCheck";C:\windows\system32
Run Code Online (Sandbox Code Playgroud)

更多信息

我从%PATH%中删除了\ \脚本并重新运行了作业,同时也将demo.py移动到.\ Scripts,现在没有做任何事情,而是出现错误:

'demo.py' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

这意味着Windows IS正在寻找和查找python脚本,但未能执行它们.为什么Windows不采取下一步并使用文件关联来查找要运行的可执行程序,将文件作为参数?

更新:

现在一切正常,我不知道为什么.

我最近开始在Jenkins上使用不同的工作,这两年我既没有运行也没有触及过两年,而且只是在没有修改的情况下工作.我已经回过头来讨论这个问题并且还原了所有的变化,这个变化也很有效.

我的猜测是Windows 10已被修补.

python jenkins windows-10

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

在TDD中,测试是否应由实施被测功能的人员编写?

我们运行一个项目,我们希望通过测试驱动开发来解决这个问题.我想到了启动项目时出现的一些问题.一个问题是:谁应该为功能编写单元测试?单元测试应该由功能实现的程序员编写吗?或者单元测试应该由另一个程序员编写,程序员定义了一个方法应该做什么,并且特征实现程序员在测试运行之前实现该方法?
如果我以正确的方式理解TDD的概念,那么特征实现程序员必须自己编写测试,因为TDD是具有小型迭代的过程.那么让另一个程序员编写的测试太复杂了吗?
你打算说什么?TDD中的测试应该由程序员自己编写,还是应该由其他程序员编写描述方法可以执行的测试?

tdd unit-testing

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

从一组数据中排除异常值的有效且准确的算法是什么?

我有200个数据行(意味着一小组数据).我想进行一些统计分析,但在此之前我想排除异常值.

为此目的有哪些潜在的算法?准确性是一个值得关注的问题.

我对Stats很新,所以需要非常基本的帮助.

statistics outliers

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

将列表与元组列表进行比较以获取另一个列表

我是python的新手,所以为天真的问题道歉.我有一份清单

l1 = [2, 4, 6, 7, 8] 
Run Code Online (Sandbox Code Playgroud)

和另一个元组列表

l2 = [(4,6), (6,8), (8,10)]
Run Code Online (Sandbox Code Playgroud)

我想输出一个l3大小列表,l1用于比较l1第一个坐标的值,l2如果找到第一个坐标则存储第二个坐标l1,否则存储0.

输出:

l3 = [0, 6, 8, 0, 10]
Run Code Online (Sandbox Code Playgroud)

我厌倦了做一个for循环,如:

l3 = []
for i in range(len(l1)):
   if l1[i] == l2[i][0]:
      l3.append(l2[i][1])
   else:
      l3.append(0)  
Run Code Online (Sandbox Code Playgroud)

但这不起作用.它给出了错误

IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

这显然l2比短于l1.

python list

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

在C#中嵌套别名

我已经typedef在C#中看到了很多问题的答案,我已经使用了,所以我有:

using Foo = System.Collections.Generic.Queue<Bar>;
Run Code Online (Sandbox Code Playgroud)

这很有效.我可以更改定义(尤其是更改Bar => Zoo等)以及使用Foo更改的所有内容.大.

现在我想要这个工作:

using Foo = System.Collections.Generic.Queue<Bar>;
using FooMap = System.Collections.Generic.Dictionary<char, Foo>;
Run Code Online (Sandbox Code Playgroud)

但是C#似乎并不喜欢Foo第二行,即使我已经在第一行中定义了它.

有没有办法使用现有的别名作为另一个的一部分?

编辑:我正在使用VS2008

c# alias typedef

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

C++编译问题; 类方法

我已经开始编写一个非常简单的类,各种类方法似乎给我带来了问题.我希望问题是我,解决方案很简单.

命令g ++ -o main main.cpp给出了以下输出:

/usr/bin/ld: Undefined symbols:
Lexer::ConsoleWriteTokens()
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include<iostream>
#include"lexer.h"


int main(){

   Lexer lexhnd = Lexer();
    std::cout << "RAWR\n";
    lexhnd.ConsoleWriteTokens();
   std::cout << "\n\n";

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

lexer.h:

#ifndef __SCRIPTLEXER
#define __SCRIPTLEXER

#include <iostream>
#include <string>
#include <vector>

#define DEF_TOKEN_KEYWORD 0

struct token{
 int flag;
 std::string data;
};

class Lexer
{
public:
//  bool IsTrue();
//  bool AddLine(char * line);
    void ConsoleWriteTokens(void);

private:
std::vector<token> TOK_list;

};


#endif
Run Code Online (Sandbox Code Playgroud)

lexer.cpp:

bool Lexer::IsTrue(){
return true; …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction methods class

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

程序仅在调试器外部的发布模式下崩溃

我有相当大的程序(> 10k行的C++代码).从Visual Studio中启动时,它在调试模式或发布模式下都能正常工作,但是从命令行手动启动时,释放模式二进制文件通常会崩溃(并不总是!!!).

删除行会导致崩溃:

bool Save(const short* data, unsigned int width, unsigned int height, 
          const wstring* implicit_path, const wstring* name = NULL, 
          bool enable_overlay = false)
{
    char* buf = new char[17];
    delete [] buf;
}
Run Code Online (Sandbox Code Playgroud)

编辑:根据请求扩展了示例.

在我的测试用例中,"len"长度为16.没关系,如果我对buf做了一些事情,它会在删除时崩溃.

编辑:应用程序工作正常没有删除[]行,但我想它会泄漏内存(因为块永远不会被分配).删除行后从未使用的buf.它似乎也不会与除char之外的任何其他类型崩溃.现在我真的很困惑.

崩溃消息非常不明确(典型的Windows"xyz.exe已停止工作").当我单击"调试程序"选项时,它进入VS,其中错误被指定为"访问冲突写入位置xxxxxxxx".虽然"没有为任何堆栈帧加载符号",但无法找到错误的位置.

我想这是一个非常严重的堆损坏的情况,但如何调试这个?我应该寻找什么?

感谢帮助.

c++ memory crash heap

9
推荐指数
2
解决办法
9347
查看次数

VB6的静态代码分析工具

现在我们正在维护一些用VB6编写的旧项目,我们计划为它实现持续集成服务器.我们希望实现一些代码分析,以跟踪可维护性,至少不会变得更糟.基本上只有一个要求 - 工具应该是命令行,所以我们可以从持续集成服务器调用它,它应该适用于VB6项目.我将非常感谢任何有关工具的建议.

谢谢Maksym

vb6 static-code-analysis

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