标签: visual-c++-2013

如何从参数列表中推导出函数对象的返回类型?

我正在尝试编写一个可以将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)

c++ templates projection visual-c++ visual-c++-2013

20
推荐指数
2
解决办法
8272
查看次数

为什么"ctor()= default"会在其他构造函数出现时改变行为?

为什么

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

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

无法打开包含文件'afxwin.h':vs 2013 c ++中没有这样的头文件或目录

所以,我试图将一些旧的代码移植到更新版本的vs所以我将项目的sln导入到我的vs 2013中,我得到了这个错误和其他一些我在这个论坛上经历了一些其他问题.所以据我所知,这与MFC(微软基础课程)有关,但所有人都在谈论vs 2010快递版,其中不包括MFC模块.我目前正在使用vs 2013社区版本,它应具有完整的功能访问权限. vs.Still我得到这个错误所以请帮助!!

谢谢!

c++ mfc visual-c++ visual-studio-2013 visual-c++-2013

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

将_M12过程中的__m128d返回给C调用者

我正在将一个函数从内联汇编移植到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)

sse masm visual-c++-2013

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

匿名结构中的Brace-or-equal-initializers在VS2013上不起作用

结构中的匿名结构中的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

9
推荐指数
2
解决办法
272
查看次数

如何让VS2013停止生成对__dtol3,__ dtoui3和其他函数的调用,以便在整数类型之间进行转换?

我正在升级面向INtime RTOS的Visual Studio 2010项目.执行转换操作的代码无法链接.在研究"内联汇编"输出文件时,事实证明,对于某些整数转换操作,VS2013正在生成对__dtol3,__ ttoui3,__ dtoul3,__ ltod3和__ultod3的调用的汇编指令.问题是INtime库不包含这些函数的定义.我已经验证了VS2013对于Debug和Release版本的Win32目标也是如此.

有没有办法让VS2013停止生成对这些功能的生成调用?

c++ assembly casting visual-c++-2013

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

在基于范围的for循环中报告了奇怪的语法错误

在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)

在包含单个分号的行上.我找到了编译器错误吗?或者基于范围的循环是否超出了我的理解范围?

c++ visual-c++ c++11 visual-c++-2013

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

如何在Visual Studio解决方案构建期间限制并行cl.exe进程的数量?

我最近注意到,一旦我开始构建我正在使用的Visual Studio解决方案(~200个C++项目),我得到了大量的cl.exe进程. 任务管理器截图

我对并行运行的几个cl.exe的事实并不感到惊讶,因为我的项目设置了/MP选项. 其中一个项目中的项目设置

但我希望它们的数量会受到Visual Studio"选项"中以下设置的限制. 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

6
推荐指数
2
解决办法
1926
查看次数

提供相同的ostream和wostream流操作符的任何快捷方式?

我想为一个类提供ostream <<和wostream <<运算符,除了一个是宽流而另一个不是.

有没有一些技巧可以做到这一点,而不仅仅是复制粘贴和进行必要的调整?

作为参考,这是必要的,因为我们使用wostream作为标准,但是当没有ostream<<提供时,Google-test的EXPECT_PRED3无法编译,即使其他宏愉快地使用ostreamwostream.

我的实际代码如下所示:

class MyClass
{
...
public:
  friend std::wostream& operator<<(std::wostream& s, const MyClass& o)
  {
    ...
  }
};
Run Code Online (Sandbox Code Playgroud)

c++ stl googletest visual-c++-2013

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

如何选择当前项目进行查找和替换

我没有看到告诉 VC++ 当前项目是什么的选项,这样我就可以在解决方案中的特定项目中进行搜索,而不是在整个解决方案中进行搜索。

在此输入图像描述

这是作为其他操作的副作用而发生的事情,还是我可以以某种方式明确选择哪个项目是当前项目?

visual-studio visual-c++ visual-studio-2013 visual-c++-2013

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