小编Nig*_*een的帖子

泛型lambda可以没有参数吗?

首先,我知道我可以使用模板化的类/函子,但这不是我想要的.

这是lambda:

auto lambda = [] (auto var) {
    decltype(var) x;

    //do stuff with x but nothing with var
};
Run Code Online (Sandbox Code Playgroud)

问题是我收到警告C4100(未参考的形式参数).我也知道我可以使用一些技巧,例如禁用警告并在lambda之后再次启用它或使用诸如UNREFERENCED_PARAMETER之类的宏,但这是作弊.

有什么方法可以实现吗?

理想的代码如下所示:

template <typename T>
auto lambda = [] () {
    T x;

    //do stuff with x
};
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++14

18
推荐指数
4
解决办法
2265
查看次数

C++ - 在Windows上使用GCC而不是MSVC值得吗?

我已经阅读了一些关于GCC vs MSVC的问题以及这些编译器的开发,比如GCC值得在Windows上用来取代MSVC?,Visual Studio还是GCC?GCC vs MS C++编译器用于维护API向后二进制兼容性.但这些都是过时的问题(2011年).随着新的c ++ 14功能的出现,两个编译器之间开始平衡.是否仍然值得使用Windows上的Code :: Blocks以及使用Microsoft Visual Studio的所有优点,例如:

  • 本机Windows库,支持使用MFC,ATL,DirectX和其他有用的Microsoft库.
  • 出色的调试功能,尤其是在使用反汇编视图时(它具有许多有用的功能).

在我读过的大多数主题中,他们总是说GCC代码生成比MSVC更好,但是这个问题的差异开始缩小.GCC的代码生成是否更好?那些最新的c ++功能呢,它们中的哪一个领先?

我在使用GCC与MSVC时看到的最大优势是:

  • 它是开源的,可以使自定义编译器代码成为可能.
  • 更容易制作可移植代码.
  • 这是免费的.
  • 更好的代码生成???

GCC上的C++ 14功能:https://gcc.gnu.org/projects/cxx1y.html

MSVC RTM上的C++ 11和C++ 14功能:http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs- 2015年,rtm.aspx

c++ gcc visual-c++

8
推荐指数
2
解决办法
2万
查看次数

关于在C/C++/Assembly中返回多个值

我已经阅读了一些关于返回多个值的问题,例如在C++和Java中只有一个返回值的原因什么?,从C++函数https://softwareengineering.stackexchange.com/questions/203471/why-do-most-programming-languages-only-support-returning-a-single-value-from-af 返回多个值.

我同意用于证明多个返回值不是绝对必要的大多数参数,我理解为什么没有实现这样的功能,但我仍然无法理解为什么我们不能使用多个调用者保存的寄存器例如ECX和EDX返回这样的值.

使用寄存器而不是创建一个Class/Struct来存储这些值或通过引用/指针传递参数不是更快,两者都使用内存来存储它们吗?如果可以做这样的事情,那么任何C/C++编译器是否都使用此功能来加速代码?

编辑:理想的代码是这样的:

(int, int) getTwoValues(void) { return 1, 2; }

int main(int argc, char** argv)
{
    (int a, int b) = getTwoValues();//a and b are actually returned in registers so future operations with a and b are faster
    //do something with a and b

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly

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

有一种在C/C++中生成nop操作码的可移植方法吗?

在汇编中,有nop操作码.假设我想单独使用C/C++语法在生成的程序集中使用该操作码.有没有可行的方法来完成它?

看完这个,我试图编译(void)0;在最新的MSVC 15.5.2在生成NOP指令,有或没有启用优化没有成功.

由于内联汇编不是 ISO C标准的一部分,并且它在C++中的支持是有条件的,我想避免这种情况.

在Microsoft Visual Studio中,我知道我可以使用此处<intrin.h>记录的标头中定义的__nop()函数在生成的程序集中成功创建单个函数.nop

c c++

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

标签 统计

c++ ×4

c ×2

assembly ×1

c++14 ×1

gcc ×1

lambda ×1

visual-c++ ×1

x86 ×1