小编Joh*_*ica的帖子

DESTDIR和PRE的PRE

我正在尝试将软件安装到特定目录.我找到了几种方法,但不确定它们之间有什么区别.

  1. ./configure --prefix=***
  2. make install DESTDIR=***
  3. make install prefix=***
  4. ./configure --prefix=***

我对这四个的功能感到困惑.他们实现了同样的目标吗?

c linux bash makefile configure

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

在linux下的GCC中使用std :: thread的正确链接选项是什么?

嗨,我正在尝试使用std::threadG ++.这是我的测试代码

#include <thread>
#include <iostream>

int main(int, char **){
    std::thread tt([](){ std::cout<<"Thread!"<<std::endl; });
    tt.join();
}
Run Code Online (Sandbox Code Playgroud)

它编译,但当我尝试运行它时,结果是:

terminate called after throwing an instance of 'std::system_error'
  what():  Operation not permitted 
Aborted
Run Code Online (Sandbox Code Playgroud)

我的编译器版本:

$ g++ --version
g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

我的测试代码出了什么问题?

更新:我使用以下命令行来编译和运行我的代码.

$ g++ -std=c++0x test.cpp
$ ./a.out
Run Code Online (Sandbox Code Playgroud)

我试过 …

c++ multithreading g++ c++11

87
推荐指数
3
解决办法
5万
查看次数

为什么这个无效的代码在g ++ 6.0上成功编译?

考虑这个奇怪的程序:

int main()
{
    int(*){} Is it C++14 or any other language?
}
Run Code Online (Sandbox Code Playgroud)

(在这里这里观看现场演示.)

即使//缺少注释,即使我-pedantic-errors在g ++ 6.0中使用选项,代码编译也没有任何错误和警告.这对我来说似乎是一个编译器错误.它真的是编译器中的错误吗?

c++ g++

84
推荐指数
2
解决办法
3485
查看次数

奇怪地使用"和"/"或"运算符

我正在尝试学习python,并且遇到了一些既好又短的代码,但并不完全有意义

背景是:

def fn(*args):
    return len(args) and max(args)-min(args)
Run Code Online (Sandbox Code Playgroud)

我得到它正在做的事情,但为什么python这样做 - 即返回值而不是True/False?

10 and 7-2
Run Code Online (Sandbox Code Playgroud)

返回5.同样,更改和将导致或将导致功能更改.所以

10 or 7 - 2
Run Code Online (Sandbox Code Playgroud)

会回来10.

这是合法/可靠的风格,还是有任何问题?

python operators logical-operators

84
推荐指数
4
解决办法
9622
查看次数

Python(列表理解):为每个项目返回两个(或更多)项目

是否可以为列表理解中的每个项目返回2个(或更多)项目?

我想要的(例子):

[f(x), g(x) for x in range(n)]
Run Code Online (Sandbox Code Playgroud)

应该回来 [f(0), g(0), f(1), g(1), ..., f(n-1), g(n-1)]

所以,要替换这段代码:

result = list()
for x in range(n):
    result.add(f(x))
    result.add(g(x))
Run Code Online (Sandbox Code Playgroud)

python list-comprehension

80
推荐指数
4
解决办法
2万
查看次数

C 或 C++ 是否保证 array &lt; array + SIZE?

假设你有一个数组:

int array[SIZE];
Run Code Online (Sandbox Code Playgroud)

或者

int *array = new(int[SIZE]);
Run Code Online (Sandbox Code Playgroud)

C 或 C++ 是否保证array < array + SIZE,如果是,在哪里?

我知道无论语言规范如何,许多操作系统通过为内核保留虚拟地址空间的顶部来保证此属性。我的问题是语言是否也保证这一点,而不仅仅是绝大多数实现。

举个例子,假设一个操作系统内核处于低内存中,有时会向用户进程提供虚拟内存的最高页面,以响应mmap对匿名内存的请求。如果malloc::operator new[]直接要求mmap分配一个巨大的数组,并且数组的末尾紧靠虚拟地址空间的顶部,从而array + SIZE环绕为零,这是否等于该语言的不合规实现?

澄清

请注意,问题不是问 about array+(SIZE-1),它是数组最后一个元素的地址。那一个保证大于array。问题是关于超过数组末尾的指针,或者p+1何时p是指向非数组对象的指针(所选答案指向的标准部分明确表示以相同方式处理)。

计算器要我解释,为什么这个问题是不一样的这一个。另一个问题询问如何实现指针的总排序。另一个问题本质上归结为一个库如何实现std::less它甚至可以用于指向不同分配对象的指针,标准说只能比较相等,而不是大于和小于。

相比之下,我的问题是关于数组末尾的一个是否总是保证大于数组。我的问题的答案是或否实际上并没有改变你将如何实施std::less,所以另一个问题似乎并不相关。如果与数组末尾的比较是非法的,那么std::less在这种情况下可能只是表现出未定义的行为。(此外,通常标准库是由与编译器相同的人实现的,因此可以自由利用特定编译器的属性。)

c c++ language-lawyer

74
推荐指数
5
解决办法
6562
查看次数

如何检查数组是否为空?

如何检查数组是否为空?我这样做了:

if not self.table[5] is None:
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

python

62
推荐指数
5
解决办法
16万
查看次数

为什么在C++ 14中对数组的初始化仍然需要双括号?

使用C++ 14标准,std::array可以使用单个括号进行初始化(请参阅http://en.cppreference.com/w/cpp/container/array):

然而,这并没有为工作std::arraystd::pair.

为什么这些工作:

std::pair<int, int> p { 1, 2 };
std::array<int, 3> a {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

但是这工作:

std::array<std::pair<int, int>, 3> b {{1, 11}, {2, 22}, {3, 33}};
Run Code Online (Sandbox Code Playgroud)

虽然这确实有效吗?

std::array<std::pair<int, int>, 3> b {{{1, 11}, {2, 22}, {3, 33}}};
Run Code Online (Sandbox Code Playgroud)

此外,为了完成,一个好的旧数组的初始化确实适用于单个大括号

std::pair<int, int> c[3] {{1, 11}, {2, 22}, {3, 33}};
Run Code Online (Sandbox Code Playgroud)

c++ initializer-list c++14

62
推荐指数
3
解决办法
3929
查看次数

为什么hasNext()为False,但hasNextLine()为True?

对于一个scanner对象,该hasNextLine()方法返回false时该hasNext()方法返回true是怎么回事?

注意:根据输入文件,该hasNext()方法将按预期返回结果; 在hasNextLine()似乎没有被返回正确的结果.

这是我正在运行的代码,它创建了以下结果:

public void ScannerTest(Reader fileReaderObject){
    Scanner scannerObj = new Scanner(fileReaderObject);

    for(int i = 1; scannerObj.hasNext(); i++){
        System.out.println(i + ": " + scannerObj.next());
        System.out.println("Has next line: " + scannerObj.hasNextLine());
        System.out.println("Has next: " + scannerObj.hasNext());
    }
    System.out.println();

    scannerObj.close();
}
Run Code Online (Sandbox Code Playgroud)

输入文件

以下是我传递给此扫描器的文件的实际内容:

a   3   9
b   3   6
c   3   3
d   2   8
e   2   5
f   2   2
g   1   7
h   1   4
i   1   1
Run Code Online (Sandbox Code Playgroud)

结果 …

java java.util.scanner

61
推荐指数
4
解决办法
2万
查看次数

此模板代码如何获得数组的大小?

我想知道为什么这种代码可以得到测试数组的大小?我对模板中的语法不熟悉。也许有人可以解释下代码的含义template<typename,size_t>。此外,参考链接也是首选。

#define dimof(array) (sizeof(DimofSizeHelper(array)))
template <typename T, size_t N>
char(&DimofSizeHelper(T(&array)[N]))[N];

void InitDynCalls()
{
    char test[20];
    size_t n = dimof(test);
    printf("%d", n);
}

Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

61
推荐指数
2
解决办法
5332
查看次数