首先,我知道我可以使用模板化的类/函子,但这不是我想要的.
这是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) 我已经阅读了一些关于GCC vs MSVC的问题以及这些编译器的开发,比如GCC值得在Windows上用来取代MSVC?,Visual Studio还是GCC?和GCC vs MS C++编译器用于维护API向后二进制兼容性.但这些都是过时的问题(2011年).随着新的c ++ 14功能的出现,两个编译器之间开始平衡.是否仍然值得使用Windows上的Code :: Blocks以及使用Microsoft Visual Studio的所有优点,例如:
在我读过的大多数主题中,他们总是说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++和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)