在最近的代码审查中,贡献者试图强制执行NULL对指针的所有检查以下列方式执行:
int * some_ptr;
// ...
if (some_ptr == NULL)
{
// Handle null-pointer error
}
else
{
// Proceed
}
Run Code Online (Sandbox Code Playgroud)
代替
int * some_ptr;
// ...
if (some_ptr)
{
// Proceed
}
else
{
// Handle null-pointer error
}
Run Code Online (Sandbox Code Playgroud)
我同意他的方式更明确,因为它明确地说"确保这个指针不是NULL",但我会反驳说,任何正在研究这个代码的人都会明白在一个指针变量中使用指针变量if声明是隐式检查NULL.另外我觉得第二种方法引入类似错误的可能性较小:
if (some_ptr = NULL)
Run Code Online (Sandbox Code Playgroud)
这对于查找和调试来说只是一种绝对的痛苦.
您更喜欢哪种方式?为什么?
对于以下代码块:
For I = 0 To listOfStrings.Count - 1
If myString.Contains(lstOfStrings.Item(I)) Then
Return True
End If
Next
Return False
Run Code Online (Sandbox Code Playgroud)
输出是:
情况1:
myString: C:\Files\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: True
Run Code Online (Sandbox Code Playgroud)
案例2:
myString: C:\Files3\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: False
Run Code Online (Sandbox Code Playgroud)
列表(listOfStrings)可能包含多个项目(最少20个),并且必须根据数千个字符串(如myString)进行检查.
是否有更好(更有效)的方法来编写此代码?
许多C++代码使用语法约定来标记成员变量.常见的例子包括
其他人尝试在使用成员变量时强制使用this-> member.
根据我的经验,大多数较大的代码库都无法一致地应用这些规则.
在其他语言中,这些惯例远没有那么普遍.我只偶尔在Java或C#代码中看到它.我想我从未在Ruby或Python代码中看到它.因此,似乎有一种趋势,即更多现代语言不对成员变量使用特殊标记.
这个约定今天在C++中是否仍然有用,或者它只是一个时代错误.特别是因为它在库之间使用不一致.没有其他语言显示没有成员前缀可以做到吗?
我正在开始一个新项目,并希望从一开始就获得我的表名和列名.例如,我总是在表名中使用复数,但最近学到的单数是正确的.
那么,如果我得到一个表"用户"然后我得到的产品只有用户会有,那么这个表应该命名为"user_product"还是只是"product"?这是一对多的关系.
进一步说,如果我(由于某种原因)每个产品的几个产品描述,它会是"user_product_description"或"product_description"还是只是"描述"?当然有正确的外键设置..命名它只描述会有问题,因为我也可以有用户说明或帐户描述或其他..
如果我想要一个只有两列的纯关系表(多对多),那会是什么样子呢?"user_stuff"或者类似"rel_user_stuff"的内容?如果是第一个,可以区分它,例如"user_product"?
任何帮助都非常感谢,如果有你们推荐的某种命名约定标准,请随时链接.
谢谢
database database-design coding-style naming-conventions relational-database
简单的例子.两种方法,一种叫另一种方法:
def method_a(arg):
some_data = method_b(arg)
def method_b(arg):
return some_data
Run Code Online (Sandbox Code Playgroud)
在Python中,我们可以def在另一个内部声明def.因此,如果method_b需要并且仅从中调用method_a,我应该method_b在内部声明method_a吗?像这样 :
def method_a(arg):
def method_b(arg):
return some_data
some_data = method_b
Run Code Online (Sandbox Code Playgroud)
或者我应该避免这样做?
我有一个同事正在积极地试图说服我不要使用do..end而是使用花括号来定义Ruby中的多行块.
我坚定地只使用花括号作为短单线,并且做其他事情.但我想我会联系更大的社区来获得一些解决方案.
那是哪个,为什么?(一些应该代码的示例)
context do
setup { do_some_setup() }
should "do somthing" do
# some more code...
end
end
Run Code Online (Sandbox Code Playgroud)
要么
context {
setup { do_some_setup() }
should("do somthing") {
# some more code...
}
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,只看上面的问题就可以解答我的问题,但我想向更大的社区开放.
在传统的C++中,将值传递给函数和方法对于大型对象来说是很慢的,并且通常不赞成.相反,C++程序员倾向于传递引用,这更快,但它引入了围绕所有权的各种复杂问题,特别是围绕内存管理(如果对象是堆分配的)
现在,在C++ 11中,我们有Rvalue引用和移动构造函数,这意味着可以实现一个大的对象(比如一个std::vector),它可以通过值传入和传出函数.
那么,这是否意味着默认值应该是传递类型实例的值,例如std::vector和std::string?自定义对象怎么样?什么是新的最佳做法?
我一直在寻找,我知道理论上的差异.
这一切都很好,问题是,它们之间的实际区别是什么?你什么时候使用private,何时使用protected?这个是否有标准或可接受的良好做法?
到目前为止,为了保留继承和多态的概念,我使用public任何应该从外部访问的东西(比如构造函数和主类功能),以及protected内部方法(逻辑,辅助方法等).我是在正确的轨道上吗?
(请注意,这个问题适合我,但也可供将来参考,因为我还没有看到像这样的问题).
如何测试字符串以查看它是否包含数组中的任何字符串?
而不是使用
if (string.contains(item1) || string.contains(item2) || string.contains(item3))
Run Code Online (Sandbox Code Playgroud) 从我在这篇文章中看到的内容,我决定开始阅读Effective C++这本书.
但是现在由于C++ 11而有许多新功能,并且一些好的实践发生了变化,我不确定它是否真的是一个好主意.C++ 11的出现是否弃用了Effective C++中包含的任何建议?如果是这样,我应该避免哪些主题?
coding-style ×10
c++ ×4
c++11 ×2
c ×1
c# ×1
database ×1
if-statement ×1
java ×1
list ×1
oop ×1
performance ×1
python ×1
ruby ×1
string ×1
vb.net ×1