小编Haz*_*oke的帖子

C ++内联函数:是这样声明,是这样定义还是两者都定义?为什么?

即使foo内联定义但未声明为以下代码,并且bar内联声明但未定义为以下代码,下面的代码段也可以毫无问题地进行编译。

int foo();
inline int foo() { return 3; }

inline int bar();
int bar() { return 4; }

inline int foobar();
inline int foobar() { return 5; }

int main(){
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题:编译器是否读foo为内联?那bar呢 这是由C ++标准指定的吗?

我的第二个问题:声明和定义内联函数的最佳实践是哪一个?是foobar?还是foobar?为什么?


inb4我阅读了与此相关的其他文章,但没有一个直接回答我的问题。

这个答案似乎暗示这foo是内联的,但是什么也没说bar。它也没有解释为什么 foo比其他人更受欢迎。答案讨论了何时应该使用内联函数。这不是我的担心:我已经决定使用内联函数。我的问题(确切地说是问题2)是我应该这样声明还是定义它,或者两者都定义,为什么其中一个约定比其他约定更好。这个问题似乎更接近我的关注,但没有人回答。

c++ inline

6
推荐指数
1
解决办法
691
查看次数

Unix如何读取带有两个连续斜杠的路径名?(例如/ home/user // mystuff)

这就是我提出这个问题的原因:我写了很多bash和Perl脚本,我发现自己必须经常连接两个路径.像这样的东西是典型的:

my $prefix = "/home/user/";
my $suffix = "/mystuff";
...
chdir $prefix.$suffix;
Run Code Online (Sandbox Code Playgroud)

问题是我并不总是记得我是否在前缀的末尾添加了斜杠,或者我是否在后缀的开头添加了斜杠.所以我可能会意外地将两个斜杠连接在一起,就像上面的例子一样.

所以我的主要问题是两个连续斜线是否会导致任何问题以及原因.但是,程序员也有这样的约定吗?在其他人编写的代码中,目录名是否总是以斜杠结尾?如果有一些我可以遵循的一致规则会很好.

unix filesystems scripting perl

5
推荐指数
2
解决办法
322
查看次数

C++ using-declaration with enums:如何导入所有枚举项?

这是一个代码片段来演示我的问题.

namespace N{
    enum E { A, B, C, D };
}

int main(){
    using N::E;
    E e = A; // syntax error: 'A' is not declared
}
Run Code Online (Sandbox Code Playgroud)

最后一行给出了语法错误.我想使用的名称N::A,N::B,N::C以及N::D在没有命名空间限定的主要功能N::.但我希望做以下两件事情

(1)我不想说using namespace N,因为那将导入N中的其他所有内容.

(2)我不想说using N::A,using N::B等了枚举的每一个成员.因为那时如果我想修改枚举,我也必须改变我的主要功能.更不用说额外的打字是乏味且容易出错的.

我试着自己寻找答案,但不能.任何帮助表示赞赏.

c++ enums using

4
推荐指数
1
解决办法
410
查看次数

标签 统计

c++ ×2

enums ×1

filesystems ×1

inline ×1

perl ×1

scripting ×1

unix ×1

using ×1