我写了以下几行:
std::bitset<4> bitvec; //bitset 0000
std::bitset<4> addition; //bitset 0000
addition.set(0); //setting the least significant bit
std::cout << addition << std::endl; //output 0001
std::cout << std::endl;
for(int x = 0; x != 16; ++x) { //addition loop
std::cout << bitvec << std::endl; //output
bitvec &= addition; //binary AND
}
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
我期望输出为:
0000
0001
0010
0011
0100
0101
....
Run Code Online (Sandbox Code Playgroud)
但循环只输出'0000'.我错过了什么基本概念?
我用的SHGetSpecialFolderPath是WINAPI的功能,也是用windows VisualExpressC++编译器(cl.exe)来编译的。但是在链接阶段时,我收到此错误:
error LNK2019: unresolved external symbol __imp___SHGetSpecialFolderPathA@16 referenced in function _main
Run Code Online (Sandbox Code Playgroud)
我想我需要链接Shell32.lib,这是正确的,我将如何做到这一点,让我的程序在另一个系统上运行,甚至可能是 XP 而不是 7,而无需重新编译它?
this一个班级的自我引用的正确用法是什么?
我有时在一个方法中使用它来清除所使用的变量是一个成员变量而不是在方法中声明的变量,但另一方面我想知道这是否是一个很好的理由,因为我认为你应该总是代码(和注释)以一种自我解释的方式,因此会不必要地使用this不必要的和另一个原因来反对它,那就是你实际上生成了比需要更多的代码.
void function() {
while(i != this->length) //length is member var
/*do something*/
}
Run Code Online (Sandbox Code Playgroud)
我经常遇到的另一种使用它的方法是内部构造函数(主要是Java),因为参数确实与必须初始化的成员变量具有相同的名称.由于Primer声明这是坏代码,我不这样做,但另一方面,我看到使用与member-vars相同的名称作为参数名称清除了它们的用途.
C++
Constructor::Constructor(int size,int value) : this->size(size),
this->value(value) {};
Java
Constructor(int size,int value) {
this->size = size;
this->value = value;
}
Run Code Online (Sandbox Code Playgroud)
我希望实际上有一个规则考虑两种语言(Java/c ++),如果不是我会重新考虑c ++,因为这是我更感兴趣的.
考虑这个例子:
有一个名为'first'的类,它在包'a'中定义.
还有一个包'b',它使用模块'a'功能.包'b'的某些功能需要类'first'的对象作为参数.但除此之外,包'a'和'b'之间没有直接的逻辑联系.
现在我想知道编写(defmethod package-b-function ((param first)) #|do stuff..|#)而不是普通函数是否合理,因为函数需要对象并且定义一个方法会为运行时环境和包'b'的其他用户阐明这一点.
我曾经用C++/Java编程,因此我不熟悉在这种情况下使用的OOP约定.
欣赏您的洞察力.
我想使用clsql的sqlite3接口.我已经使用quicklisp 安装了.但是当我尝试运行时:clsql
(clsql:with-database (db '("database.db")
:database-type :sqlite3)
nil)
Run Code Online (Sandbox Code Playgroud)
我明白了
OPERATION-ERROR while invoking #<COMPILE-OP > on
#<CLSQL-UFFI-SOURCE-FILE "clsql-uffi" "uffi" "clsql_uffi">
[Condition of type ASDF/BACKWARD-INTERFACE:OPERATION-ERROR]
Run Code Online (Sandbox Code Playgroud)
如果我只是试着赶紧行动,那就是一样的clsql-uffi.
cl-sql,cl-sql-uffi,cl-sql-sqlite3和libsqlite3-dev安装.我正在使用Ubuntu,Linux.
考虑这段代码:
(defclass test () ((test :initform nil :accessor test)))
#<STANDARD-CLASS TEST>
(defvar *test* (make-instance 'test))
*TEST*
Run Code Online (Sandbox Code Playgroud)
而这个测试:
(funcall #'test *test*)
nil
Run Code Online (Sandbox Code Playgroud)
人们会期望这是有效的:
(setf (funcall #'test *test*) 123)
Run Code Online (Sandbox Code Playgroud)
同样的
(setf (test *test*) 123)
123
Run Code Online (Sandbox Code Playgroud)
但结果如下:
; in: LAMBDA NIL
; (FUNCALL #'(SETF FUNCALL) #:NEW1175 #:TMP1177 #:TMP1176)
; ==>
; (SB-C::%FUNCALL #'(SETF FUNCALL) #:NEW1175 #:TMP1177 #:TMP1176)
;
; caught WARNING:
; The function (SETF FUNCALL) is undefined, and its name is reserved by ANSI CL
; so that even if it were …Run Code Online (Sandbox Code Playgroud) 我想实现一个在失败的情况下在重试之前等待n秒的函数,但是实现等待例程的正确方法是什么.
我认为带有if子句的无限循环可能会导致不必要的CPU使用率.
(do ((time (+ (get-universal-time) (- n 1)))
(time-cur (get-universal-time) (get-universal-time)))
((< time time-cur) nil))
Run Code Online (Sandbox Code Playgroud)
因此:这会被认为是正确的代码还是有更标准的方法?
如果你把介绍的AIF代码onlisp在一个包,并尝试在其他您在PACKAGENAME问题上运行使用它:它不是外部.
(in-package :packagename)
(defmacro aif (test-form then-form &optional else-form)
‘(let ((it ,test-form))
(if it ,then-form ,else-form)))
Run Code Online (Sandbox Code Playgroud)
想要调用语法
(in-package :otherpackage)
(aif (do-stuff)
(FORMAT t "~a~%" it)
(FORMAT t "just got nil~%"))
Run Code Online (Sandbox Code Playgroud)
我怎样才能在代码中修复这种行为,而不是将变量外包在包声明中,并且it只能通过it而不是packagename:it?
关于如何从流程流中读取已经有一些 答案,但据我所知,它们不包括从以下流程中读取:
因此,使用上述解决方案会导致浪费的进程周期,因为即使没有输出,循环也会尝试读取流,或者由于进程无法打印整个输出(由于完全缓冲)而导致解决方案无法终止输出处理程序在读取之前等待进程终止.
我目前的解决方案看起来像这样(灵感来自批量读取大文件的解决方案)
(defun control-process (process timeout)
(sb-ext:with-timeout timeout
(handler-case
(do ((output-stream (sb-ext:process-output process))
(string nil))
((and (equalp (sb-ext:process-status process) :exited)
(equalp (peek-char nil output-stream nil :eof) :eof))
(values string :exited))
(cond
((equalp (sb-ext:process-status process) :signaled)
(error 'unexpected-process-finish :finish-status :signaled))
((equalp (sb-ext:process-status process) :stopped)
(error 'unexpected-process-finish :finish-status :stopped)))
(let ((seq (make-string (file-length output-stream))))
(read-sequence seq output-stream)
(setf string (concatenate 'string string seq))
(sleep 1)))
(sb-ext:timeout (err)
(declare (ignore err))
(values nil :timeout))
(unexpected-process-finish …Run Code Online (Sandbox Code Playgroud) 我想使用bashcript将sbcl作为单个参数传递给sbcl,但是sbcl将字符串拆分为列表.
bashscript
#!/bin/bash
sbcl --noinform --eval "(progn (FORMAT t \"~{~a~%~}\" sb-ext:*posix-argv*)(eval (read-from-string (second sb-ext:*posix-argv*))))" $1
Run Code Online (Sandbox Code Playgroud)
执行:
>sh bashsrcipt.bs "\"(FORMAT t \"YEAH\")\""
sbcl
"(FORMAT
t
"YEAH")"
debugger invoked on a END-OF-FILE in thread
#<THREAD "initial thread" RUNNING {1002999833}>:
end of file on #<SB-IMPL::STRING-INPUT-STREAM {100443F523}>
Run Code Online (Sandbox Code Playgroud)
但结果应该是
>sh bashcript.bs "\"(FORMAT t \"YEAH~%\"\")"
sbcl
"(FORMAT t \"YEAH\")"
YEAH
Run Code Online (Sandbox Code Playgroud)
该手册中没有提到这样的行为.