我正在审查一个同事的代码,我发现他在全球范围内定义了几个常量:
const string& SomeConstant = "This is some constant text";
Run Code Online (Sandbox Code Playgroud)
就个人而言,这对我来说闻起来很糟糕,因为引用是指我假设的是一个从给定的char数组构造的"匿名"对象.
从语法上讲,它是合法的(至少在VC++ 7中),它似乎运行,但实际上我宁愿让他删除&因此对它正在做什么没有歧义.
那么,这真的很安全合法吗?我很着迷吗?构造的临时对象是否具有保证的寿命?我一直认为以这种方式使用的匿名对象在使用后被破坏了......
所以我的问题也可以推广到匿名对象的生命周期.标准是否规定了匿名对象的生命周期?它是否与同一范围内的任何其他对象具有相同的生命周期?或者只给出表达式的生命周期?
此外,当它作为本地时,它显然有不同的范围:
class A
{
string _str;
public:
A(const string& str) :
_str(str)
{
cout << "Constructing A(" << _str << ")" << endl;
}
~A()
{
cout << "Destructing A(" << _str << ")" << endl;
}
};
void TestFun()
{
A("Outer");
cout << "Hi" << endl;
}
Run Code Online (Sandbox Code Playgroud)
显示:
构建A(外部); 破坏A(外); 你好
好的,我们有一个目前在.NET 3.5中运行的传统ASMX Web服务,我们正在使用Visual Studio 2008.
问题是,我们需要添加身份验证,并希望利用WS-Security模型,而不会破坏任何不需要当前身份验证的现有内部客户端.
我们已经考虑过添加自定义标头,但这不是WS-Security-ish.升级到WCF虽然是长期目标,但短期内不可行.
有没有办法间接访问VS2008 ASMX Web服务的soap标头中的UsernameToken(假设它是由客户端传递的)?
所以这就是问题所在.我正在写一些StyleCop插件组件,供我工作的公司使用.因此,这些程序集需要引用Microsoft.StyleCop.CSharp.dll,例如强名称.
问题在于,如果我构建它并将其传递给我的组中的开发人员,则它们必须具有相同版本的StyleCop dll(当前为4.3.3.0)或者无法加载.
使我的附加规则DLL更独立的最佳方法是什么?我应该在GAC中安装我的4.3.3.0版本的那些从属StyleCop dll吗?程序集(与应用程序)可以使用策略文件吗?
哦,其中一个主要问题是我希望它可以与客户安装的任何版本的StyleCop(或至少4.3.3.0或更高版本)一起使用.
提前谢谢了.
我正在我的系统中创建一个"事件"的不可变表示,因此对于在构造函数中传递的所有者列表,我想对它们进行只读视图.此外,如果他们传入null
列表,我想在这种情况下制作一个只读的空列表.
现在,由于Collections.unmodifiableList
在梁木null
,我现在有这样的:
userOwners_ = Collections.unmodifiableList(userOwners != null
? userOwners
: new ArrayList<String>(0));
Run Code Online (Sandbox Code Playgroud)
但这似乎有点丑陋和低效.在Java中有更优雅的方法吗?
c# ×2
anonymous ×1
asmx ×1
assemblies ×1
c++ ×1
const ×1
java ×1
java-6 ×1
object ×1
string ×1
stylecop ×1
versioning ×1
web-services ×1
ws-security ×1