标签: visual-c++

在C++中转换为bool的性能含义是什么?

[这个问题有关,但并不等同于这一个 ]

我的编译器警告隐式转换或将某些类型转换为bool,而显式转换不会产生警告:

long t = 0;
bool b = false;
b = t;                    // performance warning: forcing long to bool
b = (bool)t;              // performance warning
b = bool(t);              // performance warning
b = static_cast<bool>(t); // performance warning
b = t ? true : false;     // ok, no warning
b = t != 0;               // ok
b = !!t;                  // ok
Run Code Online (Sandbox Code Playgroud)

这是使用Visual C++ 2008但我怀疑其他编译器可能有类似的警告.

所以我的问题是:铸造/转换的性能影响是什么bool?在某些情况下(例如,对于某些目标体系结构或处理器),显式转换是否具有更好的性能?隐式转换是否会以某种方式混淆优化器?

微软对其警告的解释并不是特别有用.他们暗示有充分的理由,但他们没有解释.

c++ visual-c++

44
推荐指数
3
解决办法
8764
查看次数

什么是"堆栈对齐"?

什么是堆栈对齐?为什么用它?可以通过编译器设置来控制吗?

这个问题的细节来自于尝试将ffmpeg库与msvc一起使用时遇到的问题,但我真正感兴趣的是对"堆栈对齐"的解释.

细节:

  • 当runnig我的msvc编译程序链接到avcodec我得到以下错误:"编译器没有对齐堆栈变量.Libavcodec已被错误编译",随后avcodec.dll崩溃.
  • avcodec.dll没有用msvc编译,所以我无法看到里面发生了什么.
  • 运行ffmpeg.exe并使用相同的avcodec.dll时一切正常.
  • ffmpeg.exe没有用msvc编译,它符合gcc/mingw(与avcodec.dll相同)

谢谢,

c++ compiler-construction mingw visual-c++ data-structures

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

Visual C++中的DLL引用

我有C++经验但不是MSVC.

我想要做的是将来自开源项目的.dll合并到我的项目中.代码可用,我已经构建了它.我有.dll以及.lib,据我所知它是C++项目所必需的.

现在很遗憾没有简单的"添加引用",将我的.dll放入include目录并将其添加到我的解决方案中.我编辑了项目属性页面,C/C++ Additional Include Directories选项以及添加.lib作为附加链接器依赖项.我在解决方案树中为dll和lib创建了一个include目录.

我的问题是当我尝试从文档中包含头文件时,VS输出会发出错误消息.现在我意识到我正在使用dll/lib组合,并且我的解决方案中没有.h文件,所以如何添加正确的包含?我正在使用QT工具包,但是我如何从开源库中添加其他头文件/ dll使我失望.

有人可以指出我正确的方向.

c++ dll visual-c++

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

size_t vs int警告

对于以下类型的代码,我总是得到以下警告.

std::vector v;
for ( int i = 0; i < v.size(); i++) {
}
Run Code Online (Sandbox Code Playgroud)

warning C4267: 'initializing' : conversion from 'size_t' to 'int', possible loss of data

我明白size()返回size_t,只是想知道是否可以安全地忽略此警告,或者我应该创建所有类型的循环变量size_t

c++ stl visual-c++

43
推荐指数
5
解决办法
4万
查看次数

编译C++项目中不使用预编译头文件的C文件?

我可以在C++项目中禁用.c文件的预编译头吗?

当我想将.C文件添加到我的程序中以获取C语言中的脚本虚拟/抽象机器时,我遇到了这些错误:

错误1错误C1853:'Release\pluginsa.pch'预编译头文件来自以前版本的编译器,或者预编译头是C++,您从C使用它(反之亦然)Z:\ Profile\Rafal\Desktop\samod\source\amx\amx.c 1 1 pluginsa

所有其他东西都是C++并使用我的预编译头.

c c++ compiler-errors precompiled-headers visual-c++

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

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

为什么编译器没有检查C++中的异常?

C++为已检查的异常提供了语法,例如:

void G() throw(Exception);
void f() throw();
Run Code Online (Sandbox Code Playgroud)

但是,Visual C++编译器不检查它们; throw标志被忽略了.在我看来,这使得异常功能无法使用.所以我的问题是:有没有办法让编译器检查异常是否被正确捕获/重新抛出?例如,Visual C++插件或不同的C++编译器.

PS.我希望编译器检查异常是否被正确捕获,否则你最终会遇到必须对每个函数调用进行捕获的情况,即使它们明确声明它们不会抛出任何东西.

更新:当抛出标有throw()的函数时,Visual C++编译器确实显示警告.这很好,但令人遗憾的是,当你调用可能抛出的子程序时,警告不会出现.例如:

void f() throw(int) { throw int(13); }
void h() throw() { g(); } //no warning here!
Run Code Online (Sandbox Code Playgroud)

c++ exception visual-c++

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

文件如何进入MSVC++ 2010中的外部依赖项?

我想知道为什么我的一个项目的VDSERR.h列在"外部依赖项"下,另一个项目没有,并且给出了一个关于在那里定义的符号的"未定义符号"编译器错误.如何将此文件也包含在其他项目中?(可能是通过拖放,但我想知道这里的确切设置.)

c++ external-dependencies visual-studio visual-c++

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

当我在一台机器上开发EXE并在另一台机器上运行它时,为什么安装vcredist_x86.exe不会修复SideBySide错误?

问题

我在Windows XP Professional版本2002 Service Pack 3上使用Microsoft Visual Studio 2005 Verison 8.0.50727.762(SP.050727-7600)编写了一个名为'Foo'的C++项目.我将项目构建到Foo.exe中.然后,我将文件Foo.exe复制到Windows Server 2003企业版Service Pack 2.当我尝试运行它时,它失败并出现此错误,

C:\foo.exe
The application has failed to start because the application configuration is incorrect.
Reinstalling the application may fix the problem.
Run Code Online (Sandbox Code Playgroud)

在事件查看器>系统中,记录了三个事件.

事件ID:32; 资料来源:SideBySide

Dependent Assembly Microsoft.VC80.CRT could not be found and Last Error was
The referenced assembly is not installed on your system.
Run Code Online (Sandbox Code Playgroud)

事件ID:59; 资料来源:SideBySide

Resolve Partial Assembly failed for Microsoft.VC80.CRT.
Reference error message: The referenced assembly is not installed on your system.
Run Code Online (Sandbox Code Playgroud)

事件ID:59; …

c++ side-by-side visual-c++

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

错误请#define _AFXDLL或在项目属性中进行更改后不要使用/ MD [d]

我正在使用Visual Studio 2011中的Win32项目.当我包含afx.h或afxwin.h时,它正在生成MFC错误.为了解决这个问题,我在Project Properties选项卡中进行了以下更改:1)使用MFC:在共享DLL中使用MFC 2)C++ - >代码生成 - >运行时库 - >多线程调试DLL(/ MDd)

在构建解决方案时,它仍然会给我以下错误:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\vc\atlmfc\include\afx.h(24): fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

我的问题是为什么Win32项目正在生成MFC错误,我该如何删除此错误.请指导我.

dll mfc visual-c++

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