[这个问题有关,但并不等同于这一个 ]
我的编译器警告隐式转换或将某些类型转换为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?在某些情况下(例如,对于某些目标体系结构或处理器),显式转换是否具有更好的性能?隐式转换是否会以某种方式混淆优化器?
微软对其警告的解释并不是特别有用.他们暗示有充分的理由,但他们没有解释.
什么是堆栈对齐?为什么用它?可以通过编译器设置来控制吗?
这个问题的细节来自于尝试将ffmpeg库与msvc一起使用时遇到的问题,但我真正感兴趣的是对"堆栈对齐"的解释.
细节:
谢谢,
担
我有C++经验但不是MSVC.
我想要做的是将来自开源项目的.dll合并到我的项目中.代码可用,我已经构建了它.我有.dll以及.lib,据我所知它是C++项目所必需的.
现在很遗憾没有简单的"添加引用",将我的.dll放入include目录并将其添加到我的解决方案中.我编辑了项目属性页面,C/C++ Additional Include Directories选项以及添加.lib作为附加链接器依赖项.我在解决方案树中为dll和lib创建了一个include目录.
我的问题是当我尝试从文档中包含头文件时,VS输出会发出错误消息.现在我意识到我正在使用dll/lib组合,并且我的解决方案中没有.h文件,所以如何添加正确的包含?我正在使用QT工具包,但是我如何从开源库中添加其他头文件/ dll使我失望.
有人可以指出我正确的方向.
对于以下类型的代码,我总是得到以下警告.
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++项目中禁用.c文件的预编译头吗?
当我想将.C文件添加到我的程序中以获取C语言中的脚本虚拟/抽象机器时,我遇到了这些错误:
错误1错误C1853:'Release\pluginsa.pch'预编译头文件来自以前版本的编译器,或者预编译头是C++,您从C使用它(反之亦然)Z:\ Profile\Rafal\Desktop\samod\source\amx\amx.c 1 1 pluginsa
所有其他东西都是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) 我想知道为什么我的一个项目的VDSERR.h列在"外部依赖项"下,另一个项目没有,并且给出了一个关于在那里定义的符号的"未定义符号"编译器错误.如何将此文件也包含在其他项目中?(可能是通过拖放,但我想知道这里的确切设置.)
问题
我在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; …
我正在使用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错误,我该如何删除此错误.请指导我.
visual-c++ ×10
c++ ×9
dll ×2
c ×1
crash-dumps ×1
exception ×1
mfc ×1
mingw ×1
side-by-side ×1
stl ×1
windbg ×1