小编gra*_*olf的帖子

函数调用for循环条件?

如果我有函数调用for循环条件,如下所示:

for (auto it = s.begin(); it != s.end(), ++it) {}
Run Code Online (Sandbox Code Playgroud)

它是在每次迭代时被调用的吗?我希望是的.编译器是否允许对其进行优化?当前的编译器是否足够聪明?或者我更喜欢使用以下内容:

for (auto it = s.begin(), auto end = s.end(); it != end; ++it) {}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

7
推荐指数
2
解决办法
3456
查看次数

即使在不必要的情况下,是否也有反对使用大括号的客观理由?

内核编码风格和 gnome 的 C 风格指南都指出:

Do not unnecessarily use braces where a single statement will do.

if (condition)
        action();
Run Code Online (Sandbox Code Playgroud)

但同时它有时应该被使用,如在以下else分支中:

if (condition) {
        do_this();
        do_that();
} else {
        otherwise();
}
Run Code Online (Sandbox Code Playgroud)

是否有任何技术或可用性原因更喜欢这种方式?有什么客观的理由不每次都把牙套放在那里吗?

c

7
推荐指数
1
解决办法
409
查看次数

C++多维数组运算符

对于多维数组,有可能以某种方式重载运算符吗?

就像是:

class A {
  ...
  int& operator[][] (const int x, const int y);
  ...
}
Run Code Online (Sandbox Code Playgroud)

c++

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

在.ssh/config文件中指定密码?

可以在我的.ssh/config文件中指定密码吗?就像是

Host host1
    User user1
    Pass password
Run Code Online (Sandbox Code Playgroud)

我发现所有资源都建议使用密钥,但这不是我的选择,我想使用密码.

如果没有股票openssh,是否有任何补丁可以允许这个?

编辑:我需要使用密码的原因是从linux连接到cygwin sshd时访问网络驱动器.

ssh openssh

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

安全地将int转换为枚举

我想知道是否有任何聪明的技巧如何安全地将整数转换为枚举.在您投票之前,这是重复的,我不是在询问如何转换(int i; Enum e = static_cast<Enum>(i)很简单).我正在问如何安全地进行,验证结果值是否真的在枚举中.

以下代码

enum class E {
    A = 1,
    B = 2
};

int main(int, char **) {
    int i = 3;
    E e = static_cast<E>(i);
}
Run Code Online (Sandbox Code Playgroud)

将编译(AFAIK)但e不包含枚举中的有效值.我想出的最好的方式是

switch (i) {
    case 1:
        return E::A;
    case 2:
        return E::B;
    default:
        throw invalid_argument("");
}
Run Code Online (Sandbox Code Playgroud)

1)看起来不太聪明2)不能很好地扩展.我可能会把一些宏放在一起,以使这更容易,但它仍然看起来很愚蠢.

那么有没有"标准"的方法呢?

谢谢

c++ enums c++11

5
推荐指数
1
解决办法
2089
查看次数

具有宏值串联的C ++`ifdef`

我可以实现类似于以下代码的内容:

#define MODULE base
#if defined (MODULE ## _dll)      <-- this should do `#ifdef base_dll`
    ...
#else
    ...
#endif
Run Code Online (Sandbox Code Playgroud)

第二行显然是错误的。我能以某种方式做到这一点吗?

谢谢

c++ visual-c++ c-preprocessor c++11 visual-c++-2012

5
推荐指数
1
解决办法
474
查看次数

使用成员声明和enable_if?

我需要使用成员声明的条件.

template <bool> struct B;
template <> struct B<true> { void foo(); };
template <> struct B<false> { };

template <typename T>
struct A : public B<is_default_constructible<T>::value> {
    using B<is_default_constructible<T>::value>::foo();

    void foo(int) {}
};
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为B<bool>::foo在一半的情况下没有定义.我怎样才能做到这一点?要在foo(int)旁边B<>::foo() 显示可见A<T>范围?

感谢帮助

c++ visual-c++ c++11 visual-studio-2012 visual-c++-2012

5
推荐指数
1
解决办法
429
查看次数

在特定提交中获取文件的 SHA 哈希

如何在指定的提交中获取文件的 SHA 哈希?我可以使用 获取触及文件的所有提交git log file,但是如何在每个特定提交中获取文件的 SHA 哈希值?

我想我可以通过检查提交而不是使用来做到这一点git-hash-object,但必须有更简单的方法。

git

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

YARD - @param标记具有未知的参数名称

我正在尝试记录我的代码YARD,但是我很难弄清楚如何摆脱以下警告:

   $ ~/.gem/ruby/2.3.0/bin/yard 
[warn]: @param tag has unknown parameter name: val 
    in file `lib/wolfsden_myanimelist/values.rb' near line 22
Files:           4
Modules:         2 (    2 undocumented)
Classes:         4 (    2 undocumented)
Constants:       6 (    6 undocumented)
Attributes:     14 (    0 undocumented)
Methods:         4 (    0 undocumented)
 66.67% documented
Run Code Online (Sandbox Code Playgroud)

在以下代码中:

    # @overload episode
    #   Gets last seen episode.
    #   @return [Integer] last seen episode
    # @overload episode=(val)
    #   Sets last seen episode.
    #   @param val last seen episode
    attr_reader :episode
    def …
Run Code Online (Sandbox Code Playgroud)

ruby yard

5
推荐指数
1
解决办法
140
查看次数

Windows 和 Linux 的单一可执行文件?

是否有可能有一个独立的可执行文件能够在 Linux 和 Windows 上运行?它不一定来自一个二进制代码。我用 gcc 编译 linux 版本,用 mingw 编译 windows 版本,然后“合并”它们,没有问题。这样的事情可能吗?

我想问题是是否可以将 PE 和 ELF 写入一个文件。或者如果有一些 Linux 和 Windows 都能理解的基本脚本。

linux windows

5
推荐指数
1
解决办法
2316
查看次数