- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
从技术上讲,在 C++ 中我们可以使用花括号来声明一个新的作用域。例如在这个函数中,它交换两个数字
void swap_int(int& first, int& second)
{
int temp = first;
first = second;
second = temp;
}
我们也可以在它自己的 block 中声明 temp
:
void swap_int(int& first, int& second)
{
// Do stuf...
{
int temp = first;
first = second;
second = temp;
}
// Do other stuff...
}
这显然有一个好处,当不再需要时,直接删除temp
。
但是,在我编写的代码中我从不使用它。此外,在来自 3rd 方库的代码中,我几乎从未见过它。
为什么不公开使用?它会带来任何性能提升,还是仅仅意味着额外的打字工作?
最佳答案
本身我没有看到任何带有裸括号的错误。它们是语言的一部分,并且定义明确。从历史上看,我发现它们有用的一个地方是在处理使用状态代码而不是异常的代码时,同时保持 const goodness:
const StatusCode statusCode = DoThing();
if (statusCode == STATUS_SUCCESS)
Foo();
else
Bar();
const StatusCode statusCode2 = DoAnotherThing(); // Eww variable name.
...
替代方案是:
{
const StatusCode statusCode = DoThing();
if (statusCode == STATUS_SUCCESS)
Foo();
else
Bar();
}
{
// Same variable name, used for same purpose, easy to
// find/replace, and has const guarantees. Great success.
const StatusCode statusCode = DoAnotherThing();
...
}
这同样适用于使用 RAII 的线程锁等对象(互斥对象、信号量等),或者通常您可能希望生命周期极短的任何类型的资源(例如文件句柄)。
就我个人而言,我认为它很少见的原因是它可能表示代码有异味(尽管并非总是如此)。在有裸括号的地方,可能有机会分解出一个函数。
以您的示例为例,如果 swap_int
有不止一项工作,那么该函数会做不止一件事。通过将实际交换代码提取到另一个函数中,您可以鼓励重用!例如:
template <typename T>
void swap_anything(T &first, T& second)
{
T temp = first;
first = second;
second = temp;
}
// -------------------------------------------
void swap_int(int& first, int& second)
{
// Do stuff...
swap_anything(first, second);
// Do other stuff...
}
关于c++ - 在函数内部使用裸括号是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633074/
在我生活的世界中,构建一个将所有飞镖都扔到墙上的解决方案,并希望其中一些能命中靶心是一种非常糟糕的解决方案方法。 那么,我的问题出现了,什么时候在约定可接受的生产系统中使用 INSERT IGNORE
在数据处理时,经常会因为index报错而发愁。不要紧,本次来和大家聊聊pandas中处理索引的几种常用方法。 1.读取时指定索引列 很多情况下,我们的数据源是 CSV 文件。假设
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我是一名优秀的程序员,十分优秀!