我正在尝试编写一个可以将a vector<T>
转换为a 的投影函数vector<R>
.这是一个例子:
auto v = std::vector<int> {1, 2, 3, 4};
auto r1 = select(v, [](int e){return e*e; }); // {1, 4, 9, 16}
auto r2 = select(v, [](int e){return std::to_string(e); }); // {"1", "2", "3", "4"}
Run Code Online (Sandbox Code Playgroud)
第一次尝试:
template<typename T, typename R>
std::vector<R> select(std::vector<T> const & c, std::function<R(T)> s)
{
std::vector<R> v;
std::transform(std::begin(c), std::end(c), std::back_inserter(v), s);
return v;
}
Run Code Online (Sandbox Code Playgroud)
但对于
auto r1 = select(v, [](int e){return e*e; });
Run Code Online (Sandbox Code Playgroud)
我明白了:
错误C2660:'select':函数不带2个参数
我必须明确地打电话select<int,int>
去工作.我不喜欢这样,因为类型是多余的.
auto r1 = select<int, …
Run Code Online (Sandbox Code Playgroud) 为什么
struct wrapper
{
explicit wrapper(void *);
wrapper() = default;
int v;
};
int main() { return wrapper().v; } // You should run this in Debug mode
Run Code Online (Sandbox Code Playgroud)
返回0xCCCCCCCC
,而
struct wrapper { wrapper() = default; int v; };
int main() { return wrapper().v; }
Run Code Online (Sandbox Code Playgroud)
和
struct wrapper { int v; };
int main() { return wrapper().v; }
Run Code Online (Sandbox Code Playgroud)
都回归0
?
c++ constructor default-constructor visual-c++ visual-c++-2013
所以,我试图将一些旧的代码移植到更新版本的vs所以我将项目的sln导入到我的vs 2013中,我得到了这个错误和其他一些我在这个论坛上经历了一些其他问题.所以据我所知,这与MFC(微软基础课程)有关,但所有人都在谈论vs 2010快递版,其中不包括MFC模块.我目前正在使用vs 2013社区版本,它应具有完整的功能访问权限. vs.Still我得到这个错误所以请帮助!!
谢谢!
我正在将一个函数从内联汇编移植到Visual Studio 2013中的MASM,并且无法从中获取返回值.
这是C调用者和汇编函数原型:
extern "C" void AbsMax(__m128d* samples, int len, __m128d* pResult);
__m128d AbsMax(__m128d* samples, int len)
{
__m128d absMax = { 0, 0 };
AbsMax(samples, len, &absMax);
return absMax;
}
Run Code Online (Sandbox Code Playgroud)
和组装功能:
.686 ;Target processor. Use instructions for Pentium class machines
.xmm
.model flat, c ;Use the flat memory model. Use C calling conventions
.code ;Indicates the start of a code segment.
AbsMax proc samples:PTR DWORD, len:DWORD, result:PTR XMMWORD
;; Load up registers. xmm0 is min, xmm1 is max. …
Run Code Online (Sandbox Code Playgroud) 结构中的匿名结构中的Brace-or-equal-initializers不会对VS2013生成的输出执行任何操作.有代码:
#include <iostream>
#include <cstdint>
struct S
{
struct
{
uint64_t val = 0;
}anon;
};
int main()
{
S s;
S *a = new S;
std::cout << s.anon.val << std::endl;
std::cout << a->anon.val << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Linux上使用此命令编译:
g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct
Run Code Online (Sandbox Code Playgroud)
(添加优化标志不会影响结果)
预期结果:
0
0
Run Code Online (Sandbox Code Playgroud)
奇怪的.使用VS2013运行它会产生垃圾值.在实施C++ 11标准方面,谁在这方面是正确的?我非常怀疑这是海湾合作委员会的错.
是否与一些无用的VS编译器选项有关?Windows扩展?由于MS制造的错误,我必须为结构制作默认构造函数?这很荒谬.
member-initialization c++11 anonymous-struct visual-c++-2013
我正在升级面向INtime RTOS的Visual Studio 2010项目.执行转换操作的代码无法链接.在研究"内联汇编"输出文件时,事实证明,对于某些整数转换操作,VS2013正在生成对__dtol3,__ ttoui3,__ dtoul3,__ ltod3和__ultod3的调用的汇编指令.问题是INtime库不包含这些函数的定义.我已经验证了VS2013对于Debug和Release版本的Win32目标也是如此.
有没有办法让VS2013停止生成对这些功能的生成调用?
在Visual Studio 2013中,我在一个空的,全新的命令行解决方案中编写了以下内容:
int main(int argc, char* argv[])
{
int xs[1];
for (auto x : xs)
do
;
while (0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到以下错误:
error C2059: syntax error : '}'
Run Code Online (Sandbox Code Playgroud)
在包含单个分号的行上.我找到了编译器错误吗?或者基于范围的循环是否超出了我的理解范围?
我最近注意到,一旦我开始构建我正在使用的Visual Studio解决方案(~200个C++项目),我得到了大量的cl.exe进程.
我对并行运行的几个cl.exe的事实并不感到惊讶,因为我的项目设置了/MP
选项.
但我希望它们的数量会受到Visual Studio"选项"中以下设置的限制.
我认为在4核PC上并行运行数十个进程并不是构建解决方案的最有效方法.
所以,基本上我有两个问题:
cl.exe
实例数量?PS我通常使用Visual Studio 2013 Update 4编译我的解决方案,但Visual Studio 2017可以观察到相同的行为.
c++ visual-studio visual-c++ visual-studio-2013 visual-c++-2013
我想为一个类提供ostream <<和wostream <<运算符,除了一个是宽流而另一个不是.
有没有一些技巧可以做到这一点,而不仅仅是复制粘贴和进行必要的调整?
作为参考,这是必要的,因为我们使用wostream作为标准,但是当没有ostream<<
提供时,Google-test的EXPECT_PRED3无法编译,即使其他宏愉快地使用ostream
或wostream
.
我的实际代码如下所示:
class MyClass
{
...
public:
friend std::wostream& operator<<(std::wostream& s, const MyClass& o)
{
...
}
};
Run Code Online (Sandbox Code Playgroud) 我没有看到告诉 VC++ 当前项目是什么的选项,这样我就可以在解决方案中的特定项目中进行搜索,而不是在整个解决方案中进行搜索。
这是作为其他操作的副作用而发生的事情,还是我可以以某种方式明确选择哪个项目是当前项目?
visual-c++-2013 ×10
c++ ×7
visual-c++ ×6
c++11 ×2
assembly ×1
casting ×1
constructor ×1
googletest ×1
masm ×1
mfc ×1
projection ×1
sse ×1
stl ×1
templates ×1