小编Pyp*_*ros的帖子

为什么在我可以使用换行符时使用endl?

有没有理由使用endlcout当我可以只使用\n?我的C++书说要使用endl,但我不明白为什么.是\n不是广泛支持endl,或者我错过了什么?

c++ iostream string-formatting buffering

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

在Java 7 multicatch块中,捕获的异常的类型是什么?

在Java 7多个分块中,如下所示:

try {
    // code that throws exception
} catch (CharacterCodingException | UnknownServiceException ex) {
    // handle exception
}
Run Code Online (Sandbox Code Playgroud)

什么是编译时类型ex?它是两个异常类型共同的派生类最多的类吗?在这个例子中,这将是一个IOException.

java exception java-7

27
推荐指数
2
解决办法
7019
查看次数

哪个文件是Perl的钻石操作符(空文件句柄)当前正在读取?

我正在使用Perl的菱形 <>运算符来读取命令行中指定的文件.

我希望能够报告类似的消息"Trouble on line $. of file $FILENAME",但是如何判断钻石当前使用的是哪个文件?

perl diamond-operator

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

C++迭代器的生命周期和有效性是什么?

我打算在C++中实现一个Things列表,其中的元素可能会被无序删除.我不希望我需要任何类型的随机访问(我只需要定期扫描列表),项目的顺序也不重要.

所以我想std::list<Thing*> with this->position = insert(lst.end(), thing)应该做的伎俩.我希望Thing类能够记住每个实例的位置,以便以后可以轻松地完成lst.erase(this->position).

但是,我对C++ STL容器仍然有点新意,我不知道将迭代器保持这么长时间是否安全.特别是,考虑到在插入Thing之前和之后将删除其他元素.

c++ iterator stl object-lifetime

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

我可以在AssertionError上强制调试python吗?

假设我有一个python程序,其中assert用于定义事物应该是什么,并且我想用read-eval-loop捕获异常而不是AssertionError抛出.

当然,我可以

if (reality!=expectation):
    print("assertion failed");
    import pdb; pdb.set_trace();
Run Code Online (Sandbox Code Playgroud)

但是在代码中这比普通的更难看assert(reality==expectation).

我本可以在顶层pdb.set_trace()打电话except:,但后来我失去了失败的所有背景,对吧?(我的意思是,堆栈跟踪可以从异常对象中恢复,但不能从参数值中恢复,等等)

有没有像--magic命令行标志可以将python3解释器变成我需要的东西?

python assert python-3.x pdb

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

为什么这些C宏不能写成函数?

我正在研究netstat工具(Linux)的代码,其中AFAIK主要读取/proc/net/tcp文件并从中删除漂亮的文件.(我现在关注的是-t模式.)

我对作者选择的编码风格感到有些困惑:

static int tcp_info(void)
{
    INFO_GUTS6(_PATH_PROCNET_TCP, _PATH_PROCNET_TCP6, "AF INET (tcp)", tcp_do_one);
}
Run Code Online (Sandbox Code Playgroud)

哪里

#define INFO_GUTS6(file,file6,name,proc)                \
 char buffer[8192];                                     \
 int rc = 0;                                            \
 int lnr = 0;                                           \
 if (!flag_arg || flag_inet) {                          \
    INFO_GUTS1(file,name,proc)                          \
 }                                                      \
 if (!flag_arg || flag_inet6) {                         \
    INFO_GUTS2(file6,proc)                              \
 }                                                      \
 INFO_GUTS3
Run Code Online (Sandbox Code Playgroud)

哪里

 #define INFO_GUTS3                                      \
  return rc;
Run Code Online (Sandbox Code Playgroud)

#if HAVE_AFINET6
#define INFO_GUTS2(file,proc)                           \
   lnr = 0;                                              \
   procinfo = fopen((file), "r");                        \
   if (procinfo != NULL) {                               \ …
Run Code Online (Sandbox Code Playgroud)

c macros networking coding-style

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

Py_FindMethod在python3中消失了.我应该用什么呢?

我正在尝试将我在sourceforge上找到的Python的avl模块移植到python3.我设法摆脱了大多数错误,但我找不到有关如何处理的明确信息

Py_LOCAL(PyObject *) avl_tree_getattr(avl_tree_Object * self, char *name)
{
    return Py_FindMethod(avl_tree_methods, (PyObject *) self, name);
}
Run Code Online (Sandbox Code Playgroud)

邮件列表上有一些建议只是使用PyObject_GenericGetAttr,但我必须承认我不知道python模块的内部足以看到我如何在这种特定情况下应用它.

任何提示?

python porting module python-3.x

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

破管不再结束程序?

当您管道两个进程并在管道的"输出"处终止该进程时,第一个进程用于接收"Broken Pipe"信号,该信号通常也会终止它.比如跑步

$> do_something_intensive | less
Run Code Online (Sandbox Code Playgroud)

然后退出较少用于立即返回到SuSE8或以前版本的响应shell.当我今天尝试时,do_something_intensive显然仍在运行,直到我手动杀死它.似乎某些事情发生了变化(glib?shell?),这使得程序忽略了"破碎的管道"......

你们中的任何人都有这方面的暗示吗?如何恢复以前的行为?为什么它已被改变(或为什么它总是存在多个语义)?

编辑:进一步测试(使用strace的)揭示了"SIGPIPE" 生成,但该程序不被中断.一个简单的

#include <stdio.h>
int main() 
{
   while(1) printf("dumb test\n");
   exit(0);
}
Run Code Online (Sandbox Code Playgroud)

将继续无止境

--- SIGPIPE (Broken pipe) @ 0 (0) ---
write(1, "dumb test\ndumb test\ndumb test\ndu"..., 1024) = -1 EPIPE (Broken pipe)
Run Code Online (Sandbox Code Playgroud)

被杀害.我可以肯定在我的程序中编写一个信号处理程序并确保它终止,但我更需要一些环境变量或shell选项来强制程序在SIGPIPE上终止

再次编辑:它似乎是一个特定于tcsh的问题(bash正确处理它)和终端依赖(Eterm 0.9.4)

linux shell broken-pipe tcsh

5
推荐指数
2
解决办法
6958
查看次数

不遵循构造函数中的局部变量.这是gdb中的错误吗?

我目前在Ubuntu Linux上运行gdb版本6.7.1,并在C++项目中工作.

令人惊讶的是,我试图调试构造函数,并且我发现gdb没有遵循或注意到在构造函数范围内声明的局部变量.这是一个错误吗?

感谢您提供任何信息..

c++ debugging gdb

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

基类'class std :: vector <...>'有一个非虚析构函数

我的一个C++类派生自std::vector它,它可以充当一个容器,也可以对其内容执行自定义操作.不幸的是,编译器抱怨析构函数不是虚拟的,我无法改变,因为它在标准库中.

我做错了什么(你不应该从STL派生)或者我能做些什么来保持编译器的快乐?(appart从停止使用-Weffc ++ :)

编辑:派生类不接触矢量操作算法,而只是为图像矢量添加一些信息,如"元素宽度/高度".举个例子,你可以想到

class PhotoAlbum: public std::vector<Photo> {
    String title;
    Date from_time, to_time;
    // accessors for title and dates
    void renderCover(Drawable &surface);
};
Run Code Online (Sandbox Code Playgroud)

您认为相册主要是带有一些元数据(标题和时间)和专辑特定功能的图片集合,例如将某些照片的缩略图渲染到曲面上以制作专辑封面.所以imho,相册IS-A的集合Photo,比它更多的HAS-A这样的收藏.

我没有看到在获得额外"收集"字段的getPhotoVector()方法中获得任何好处PhotoAlbum.

c++ stl vector virtual-destructor

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

Perl函数参数消失.为什么?

我正在Perl中建立一个压力系统来纠正学生的编程任务.我建立了一个check(<boolean>,<congrats-message>,<blame-message>)应该帮助我的功能.

当我调用它时

check(get_option('content-type') eq "text/html","good type", "bad type");
Run Code Online (Sandbox Code Playgroud)

一切都好.但如果我敢这么做的话

check(get_option('content-type') =~ m:text/html:i, "good type", "bad type");
Run Code Online (Sandbox Code Playgroud)

当正则表达式找不到匹配时它会中断.实际上它等同于a check("good type", "bad type").我只用$_[0],$_[1]等在检查()函数,它不喜欢我了"民主基金"作为第一个参数:我真的可以赶上与错误die unless $#_ == 2.

发生了什么 ?我一起工作

check((get_option('content-type') =~ m:text/html:i && 1), "good type", "bad type");
Run Code Online (Sandbox Code Playgroud)

但我很想知道这种奇怪情况的原因和原因.

-

sub check {
  if ($_[0]) {
    $okay++;
    print STDERR "^_^ $_[1] ($okay)\n";
  } else {
    print STDERR ">_< $_[2]\n";
  }
  return $_[0];
}
Run Code Online (Sandbox Code Playgroud)

perl undefined function-calls matching

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

对于 GNU ld 'legacy __sync_synchronize' 警告我该怎么办?

我有一些使用本地范围、程序生命周期对象的 C++ 代码,例如

void testFunction(int arg) {
   static Tested tested(0);
   tested.use(arg);
}
Run Code Online (Sandbox Code Playgroud)

它与旧版本的 GCC 构建得很好。使用 GCC 8.2.0,我在链接时收到令人费解的警告:

警告:使用旧版兼容的 __sync_synchronize。不适合多线程应用

它指向定义测试的行,并且确实存在对编译器生成的 __sync_synchronize() 的调用。我想它是为了确保没有两个线程可以同时运行初始化代码,并使延迟初始化产生与加载时初始化相同的结果。

Tested 类的此实现重现了问题:

class Tested {
  int sum;
public:
  Tested(int init) : sum(init) {}
  void use(int arg) {
    sum += arg;
  }
  int current() const {
    return sum;
  }
};
Run Code Online (Sandbox Code Playgroud)

该代码预计在单线程嵌入式平台上运行。

我是否正确地认为该警告与我无关?

我可以做什么(除了停止使用静态对象)来消除警告消息?

c++ devkitpro ld thread-safety suppress-warnings

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