在某处定义了空<script type="text/javascript">
$(document).ready(function () {
$('textarea').each(function () {
CKEDITOR.replace($(this).attr('id'));
});
});
</script>
吗?
我的意思是:
我能做到:
std::string
但是,如果我这样做:
// code #1
int process(const char *s = nullptr);
// later I can use:
process();
它编译和工作,当我使用该函数时,不需要创建对象。
是否有标准方法可以执行以下操作:
// code #2
int process(const std::string &s = "");
// later I can use:
process(); // wait, an object is created...
这不是瓶颈,也不是过早的优化。
我认为C ++不是Java,所以正确的方法不是创建你不需要的对象。
另外我相信// code #3
const std::string EMPTY_STR;
int process(const std::string &s = EMPTY_STR);
// later I can use:
process(); // fine, no object is created...
看起来比code 3
好得多,并且它表明字符串为空(并且可能不会被使用)的意图,而不是code 2
,其中不是很code 2
明确字符串为""
的原因。
答案 0 :(得分:4)
没有(安全)制作参考的方式指的是什么。如果您根本不想创建对象,则必须使用指针;
int process(const std::string *s = nullptr);
如果要使用引用,则必须有某个对象。为此,您可以使用默认构造的(空)字符串作为默认参数;
int process(const std::string& s = std::string());
答案 1 :(得分:0)
首先,我有点惊讶你需要一个OBJECT。无论如何它将成为一个const对象,那么它给你什么简单的const char *呢?
其次,以通用方式解决您的问题。以下无所不在的代码存在真正的问题:
void foo(const std::string& data);
它允许将foo与std :: strings和const char *一起使用,几乎适合所有人。对于foo()的大多数用户来说无关紧要,但是对于真正修复了性能的人(如纳秒),从他们的const char *创建临时std :: string是一个痛点。为解决这个问题,发明了StringRef。它在std中不可用,但它在许多库中退出,包括boost,并且易于实现。这个想法如下:
class StringRef {
...
StringRef(const std::string& str) : b(str.begin()), end(str.end()) {}
StringRef(const char* str) : b(str), end(str + strlen(str)) {}
...
private:
const char* const b;
const char* const e;
};
void foo(const StringRef str);