标签: visual-c++

"VC++"和"C++"有什么区别?

有人问我对VC++的熟悉程度以及我对C++的熟悉程度.有什么不同?

c++ visual-c++

52
推荐指数
4
解决办法
3万
查看次数

在任何情况下new都会返回NULL吗?

我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.

c++ memory-management visual-c++-6 new-operator visual-c++

52
推荐指数
3
解决办法
4万
查看次数

这个表达式意味着什么,为什么要编译?

输入拼写错误后,编译并执行以下表达式(简化):

if((1 == 2) || 0 (-4 > 2))
  printf("Hello");
Run Code Online (Sandbox Code Playgroud)

当然,0应该不存在.

为什么要编译,表达式是什么意思?

原始(简化)应如下所示:

if((1 == 2) || (-4 > 2))
  printf("Hello");
Run Code Online (Sandbox Code Playgroud)

这没有编译:

if((1 == 2) || true (-4 > 2))
  printf("Hello");

if((1 == 2) || 1 (-4 > 2))
  printf("Hello");

if((1 == 2) || null (-4 > 2))
  printf("Hello");
Run Code Online (Sandbox Code Playgroud)

c visual-c++

52
推荐指数
4
解决办法
2406
查看次数

vcvarsall.bat需要python来编译visual studio 2015中的缺失(第14节)

我试图在Windows 10下使用Visual Studio 2015终极安装在python 3.5中安装numpy.

短版本:vcvarsall.batvs14文件C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC夹文件夹中缺少文件.为什么?

长版:跑步pip install numpy给我这个错误error: Unable to find vcvarsall.bat

研究这个错误让我得到了几个stackoverflow答案,帮助我弄清楚python需要c ++编译器来编译一些包.并且它需要使用用于编译python 3.5的相同版本的编译器来执行此操作( 错误:无法找到vcvarsall.bat).我的python是使用[MSC v.1900 64位(AMD64)]编译的 - 这是vs 14(visual studio 2015)

与我的研究,我从中学到了进一步的运动: PIP安装提示错误:无法找到vcvarsall.batget_build_version()$python_install_prefix/Lib/distutils/msvc9compiler.py回报的VS是768,16可以用来寻找路径的版本,vcvarsall.bat 对于我这个方法返回14,所以一切都正确.

现在,当我查看文件夹时C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC,文件vcvarsall.bat丢失了.

但是当我查看文件夹时,C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC有一个vcvarsall.bat.

为什么vs 14.0中缺少vcvarsall.bat?

pip python-2.x visual-c++ python-3.x visual-studio-2015

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

数组零长度

我正在重构一些旧的代码,并发现很少的结构包含零长度数组(如下).当然,由pragma压制的警告,但我没有通过包含这种结构的"新"结构创建(错误2233).数组'byData'用作指针,但为什么不使用指针呢?或长度为1的数组?当然,没有添加任何评论让我喜欢这个过程...任何使用这种东西的原因?重构那些的任何建议?

struct someData
{
   int nData;
   BYTE byData[0];
}
Run Code Online (Sandbox Code Playgroud)

NB它是C++,Windows XP,VS 2003

c++ arrays visual-c++ flexible-array-member

51
推荐指数
4
解决办法
3万
查看次数

托管c ++和c ++之间的区别

主题标题实际上是我的问题.第二个问题是:我什么时候使用这两个?

c++ programming-languages managed-c++ visual-c++

50
推荐指数
2
解决办法
5万
查看次数

如何从Visual Studio命令提示符以外的命令行运行regasm.exe?

我想从cmd运行regasm.exe.可在c:\ windows\Microsoft.net\framework\2.057中找到

我喜欢这个c:\ regasm.exe

它给予regasm不被认为是内部或外部命令.

所以我明白我需要在环境变量中设置regasm.exe的路径.

如上所述,我需要为哪个变量设置运行regasm的路径?

.net c++ command-line operating-system visual-c++

50
推荐指数
5
解决办法
18万
查看次数

信号NaN的有用性?

我最近读了很多关于IEEE 754和x87架构的内容.我正在考虑在我正在研究的一些数值计算代码中使用NaN作为"缺失值",我希望使用信令 NaN将允许我在我不想要的情况下捕获浮点异常继续"缺失值".相反,我会使用安静的 NaN来允许"缺失值"通过计算传播.但是,信号NaN不起作用,因为我认为它们将基于它们上存在的(非常有限的)文档.

以下是我所知道的摘要(所有这些都使用x87和VC++):

  • _EM_INVALID(IEEE"无效"异常)在遇到NaN时控制x87的行为
  • 如果屏蔽了_EM_INVALID(禁用了异常),则不会生成异常,操作可以返回安静的NaN.涉及信令NaN的操作不会引发异常,但会转换为安静的NaN.
  • 如果_EM_INVALID未被屏蔽(启用了异常),则无效操作(例如,sqrt(-1))会导致抛出无效异常.
  • x87 从不生成信令NaN.
  • 如果_EM_INVALID是未屏蔽的,任何使用的信令的NaN(即使初始化与它的变量)的导致一个无效引发异常.

标准库提供了一种访问NaN值的方法:

std::numeric_limits<double>::signaling_NaN();
Run Code Online (Sandbox Code Playgroud)

std::numeric_limits<double>::quiet_NaN();
Run Code Online (Sandbox Code Playgroud)

问题是我认为信号NaN没有任何用处.如果屏蔽了_EM_INVALID,则其行为与安静NaN完全相同.由于没有NaN与任何其他NaN相当,因此没有逻辑差异.

如果屏蔽_EM_INVALID (启用异常),则甚至无法使用信号NaN初始化变量: double dVal = std::numeric_limits<double>::signaling_NaN();因为这会引发异常(信号NaN值被加载到x87寄存器以将其存储到存储器地址).

您可以像我一样思考以下内容:

  1. 掩码_EM_INVALID.
  2. 使用信令NaN初始化变量.
  3. Unmask_EM_INVALID.

但是,步骤2会导致信令NaN转换为安静的NaN,因此后续使用它不会导致异常被抛出!那么WTF?!

信号NaN是否有任何实用性或目的?我理解其中一个原始意图是使用它初始化内存,以便可以捕获使用单位化浮点值.

有人能告诉我,如果我在这里遗失了什么吗?


编辑:

为了进一步说明我希望做的事情,这里有一个例子:

考虑对数据向量(双精度)执行数学运算.对于某些操作,我想允许向量包含"缺失值"(假设这对应于电子表格列,例如,其中一些单元格没有值,但它们的存在很重要).对于某些操作,我希望允许向量包含"缺失值".如果集合中存在"缺失值",也许我想采取不同的行动 - 可能执行不同的操作(因此这不是无效的状态).

这个原始代码看起来像这样:

const double MISSING_VALUE = 1.3579246e123;
using std::vector;

vector<double> missingAllowed(1000000, MISSING_VALUE);
vector<double> missingNotAllowed(1000000, MISSING_VALUE);

// ... populate missingAllowed and missingNotAllowed with (user) data...

for (vector<double>::iterator it = missingAllowed.begin(); it != missingAllowed.end(); ++it) …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point ieee-754 visual-c++ x87

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

如何强制执行'override'关键字?

有没有办法override在Visual C++ 2012中强制使用C++ 11 关键字?

(即如果我忘记说override,那么我想得到一个警告/错误.)

c++ overriding visual-c++ c++11 visual-studio-2012

50
推荐指数
2
解决办法
6855
查看次数

"懒惰的人的enable_if"是合法的C++吗?

我经常使用一种技术,我称之为"懒人enable_if",我使用它decltype和逗号运算符来启用基于某些模板输入的函数.这是一个小例子:

template <typename F>
auto foo(F&& f) -> decltype(f(0), void())
{
    std::cout << "1" << std::endl;
}

template <typename F>
auto foo(F&& f) -> decltype(f(0, 1), void())
{
    std::cout << "2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

随着--std=c++11,g ++ 4.7+和Clang 3.5+愉快地编译那段代码(并且它按照我的预期工作).但是,当使用MSVC 14 CTP5时,我得到这个错误抱怨foo已经定义:

错误错误C2995:'unknown-type foo(F &&)':函数模板已经定义了c ++ - scratch main.cpp 15

所以我的问题是:"懒人enable_if"是合法的C++还是这是一个MSVC错误?

c++ sfinae visual-c++ language-lawyer c++11

50
推荐指数
2
解决办法
3966
查看次数