STL标准不要求从std :: string中重新计算.但事实上,大多数C++实现都提供了refcounted,copy-on-write字符串,允许您将值作为基本类型传递.此外,这些实现(至少g ++)使用原子操作使这些字符串无锁和线程安全.
简单的测试显示了写时复制语义:
#include <iostream>
#include <string>
using namespace std;
void foo(string s)
{
cout<<(void*)s.c_str()<<endl;
string ss=s;
cout<<(void*)ss.c_str()<<endl;
char p=ss[0];
cout<<(void*)ss.c_str()<<endl;
}
int main()
{
string s="coocko";
cout<<(void*)s.c_str()<<endl;
foo(s);
cout<<(void*)s.c_str()<<endl;
}
Run Code Online (Sandbox Code Playgroud)
在使用非常数成员后,只有两个地址完全打印.
我使用HP,GCC和Intel编译器测试了这段代码,得到了类似的结果 - 字符串可以作为写时复制容器.
另一方面,VC++ 2005清楚地表明每个字符串都是完全复制的.
为什么?
我知道VC++ 6.0中存在一个错误,它具有非线程安全的引用计数实现,导致随机程序崩溃.这是什么原因?他们只是害怕再使用ref-count,即使这是常见的做法?他们宁愿不使用重新计算来解决问题吗?
谢谢
正如标题所说,我很想知道你通常如何构建ASP.NET解决方案.
我对ASP.NET WebSite解决方案特别感兴趣,但是其他类型的信息(WebApplication,MVC)也可能很有趣.
一些具体问题:
谢谢
有没有办法确定当前文件是否是在Perl源中执行的文件?在Python中,我们使用以下构造执行此操作:
if __name__ == '__main__':
# This file is being executed.
raise NotImplementedError
Run Code Online (Sandbox Code Playgroud)
我可以使用FindBin
和一起破解一些东西__FILE__
,但是我希望有一种规范的方法可以做到这一点.谢谢!
我正在尝试测试一些我刚刚编写的流文件上传/下载代码,但我需要一个巨大的(比我的内存大,如> 4GB)文件来测试.什么是快速生成特定大小的文件(但内部没有特定数据)的好方法?
我知道我可以在我的硬盘上查看一个适当大小的文件,但我很好奇是否还有其他好方法可以生成测试文件,特别是如果我想要一个特定的大小.下载文件也不好,因为我的连接速度很慢.
有谁知道任何工具允许比较两个几乎完全相同的网站?
简单地说,我有一个沙箱站点和生产站点,并希望找出它们之间的区别,以了解要移动到生产站点的内容.
谢谢!
编辑:
好的,我看到我错过了一条重要的信息(对不起!).这两个站点都是在线的,基于CMS(Drupal),因此我需要一些可以在两个站点上运行的爬行工具,并显示沙箱中存在的页面,而不是生产中的页面.
感谢所有回答的人!
根据我教C++的经验,操作员重载是导致学生最悲伤的主题之一.甚至在stackoverflow上查看问题:例如,将+运算符设为外部或成员?如何处理对称性等,似乎很麻烦.
当我从C++迁移到Java时,我担心我会错过这种能力,但除了像[]或()之类的运算符之外,我真的不觉得需要重载运算符.事实上,我觉得没有它们的程序更具可读性.
注意:我把它作为社区维基.我们来讨论一下.我想听听意见.
试图通过这里的类投射异常:
FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream);
Run Code Online (Sandbox Code Playgroud)
抛出此异常:
java.lang.ClassCastException: javax.xml.bind.JAXBElement
Run Code Online (Sandbox Code Playgroud)
我不明白这个 - 因为这个类是由xjc.bat工具生成的 - 它生成的类我根本没有改变 - 所以这里应该没有转换问题 - unmarshaller应该真的给我一个类可以投射到FooClass.
关于我做错了什么的任何想法?
有没有办法在嵌套好的类结构中编写装饰器?例如,没有类,这可以正常工作:
def wrap1(func):
def loc(*args,**kwargs):
print 1
return func(*args,**kwargs)
return loc
def wrap2(func):
def loc(*args,**kwargs):
print 2
return func(*args,**kwargs)
return loc
def wrap3(func):
def loc(*args,**kwargs):
print 3
return func(*args,**kwargs)
return loc
def merger(func):
return wrap1(wrap2(wrap3(func)))
@merger
def merged():
print "merged"
@wrap1
@wrap2
@wrap3
def individually_wrapped():
print "individually wrapped"
merged()
individually_wrapped()
Run Code Online (Sandbox Code Playgroud)
输出是:
1
2
3
merged
1
2
3
individually wrapped
Run Code Online (Sandbox Code Playgroud)
这就是我想要的.但是,现在让我们说,我想使merged
和individually_wrapped
静态或类方法.只要装饰器不在类名称空间之外,这也可以工作.有没有什么好方法将装饰器放在命名空间中?我宁愿不列举所有不起作用的方法,但主要问题是如果merger
是一个方法,它就无法访问这些wrapX
方法.也许这是一个想要做的蠢事,但有没有人得到这样的东西工作,所有装饰器和装饰方法在同一个类?
如何在.NET中解析Visual Studio解决方案(SLN)文件?我想编写一个应用程序,将多个解决方案合并为一个,同时保存相对构建顺序.
这ORDER BY
通常很慢吗?我试图运行一些sql语句,其中该WHERE
子句非常简单,但后来我尝试ORDER BY
在VARCHAR(50)
索引列上.
出于显示原因,我需要按字母顺序排序.我认为让数据库为我做这个是最有效的.
在这一点上,我期待着
这是我尝试运行的实际查询:
// B.SYNTAX is a TEXT/CLOB field
// Indexes on NAME, MODULENAME. PREVIOUS is a CHAR(1) with no index
"SELECT A.NAME, B.SYNTAX, B.DESCRIPTION, A.RATE1, A.RATE2,
A.RATE3, A.STARTDATE, A.ENDDATE, A.HIDE, A.CATEGORYNAME
FROM A, B WHERE A.MODULENAME='"+loadedModuleName+"'
AND A.NAME = B.NAME AND (A.PREVIOUS<>'N' OR A.PREVIOUS IS NULL)
ORDER BY A.NAME"
Run Code Online (Sandbox Code Playgroud)
表A的大小约为2000行,B约为500行.
我可能还应该提到,由于我们支持多个数据库,因此无法进行太多数据库特定的优化.此外,该应用程序部署在客户站点.
我期待返回数百条记录(少于1000条).
你会怎么做?任何提示都表示赞赏.谢谢.