有没有理由使用endl与cout当我可以只使用\n?我的C++书说要使用endl,但我不明白为什么.是\n不是广泛支持endl,或者我错过了什么?
在Java 7多个分块中,如下所示:
try {
// code that throws exception
} catch (CharacterCodingException | UnknownServiceException ex) {
// handle exception
}
Run Code Online (Sandbox Code Playgroud)
什么是编译时类型ex?它是两个异常类型共同的派生类最多的类吗?在这个例子中,这将是一个IOException.
我正在使用Perl的菱形 <>运算符来读取命令行中指定的文件.
我希望能够报告类似的消息"Trouble on line $. of file $FILENAME",但是如何判断钻石当前使用的是哪个文件?
我打算在C++中实现一个Things列表,其中的元素可能会被无序删除.我不希望我需要任何类型的随机访问(我只需要定期扫描列表),项目的顺序也不重要.
所以我想std::list<Thing*> with this->position = insert(lst.end(), thing)应该做的伎俩.我希望Thing类能够记住每个实例的位置,以便以后可以轻松地完成lst.erase(this->position).
但是,我对C++ STL容器仍然有点新意,我不知道将迭代器保持这么长时间是否安全.特别是,考虑到在插入Thing之前和之后将删除其他元素.
假设我有一个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解释器变成我需要的东西?
我正在研究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) 我正在尝试将我在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模块的内部足以看到我如何在这种特定情况下应用它.
任何提示?
当您管道两个进程并在管道的"输出"处终止该进程时,第一个进程用于接收"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)
我目前在Ubuntu Linux上运行gdb版本6.7.1,并在C++项目中工作.
令人惊讶的是,我试图调试构造函数,并且我发现gdb没有遵循或注意到在构造函数范围内声明的局部变量.这是一个错误吗?
感谢您提供任何信息..
我的一个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.
我正在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) 我有一些使用本地范围、程序生命周期对象的 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++ ×5
perl ×2
python ×2
python-3.x ×2
stl ×2
assert ×1
broken-pipe ×1
buffering ×1
c ×1
coding-style ×1
debugging ×1
devkitpro ×1
exception ×1
gdb ×1
iostream ×1
iterator ×1
java ×1
java-7 ×1
ld ×1
linux ×1
macros ×1
matching ×1
module ×1
networking ×1
pdb ×1
porting ×1
shell ×1
tcsh ×1
undefined ×1
vector ×1