标签: visual-c++

C++ 是机器无关的还是机器相关的?

https://www.geeksforgeeks.org/introduction-to-c-programming-language/ \n在一些按键和功能下

\n
\n

机器独立但平台相关:C++ 可执行文件不是平台无关的(Linux 上编译的程序无法在 Windows 上运行\xe2\x80\x99),但它们是机器无关的。

\n
\n
    \n
  1. 平台无关:这部分语句正确指出 C++ 可执行文件不是平台无关的。由于系统库、系统调用和可执行文件格式的差异,在一种操作系统(例如 Linux)上编译的程序通常不会直接在另一种操作系统(例如 Windows)上运行。

    \n
  2. \n
  3. 机器独立:本文中的术语“机器独立”可能会产生误导或不精确。编译的 C++ 可执行文件也不是真正独立于机器的。它们是机器相关的,因为它们被编译为特定于目标 CPU 架构的机器代码。例如,为 x86 架构编译的代码将无法在基于 ARM 的计算机上运行。

    \n
  4. \n
\n

那么为什么在每一篇文章中都写到 C++ 是机器独立的呢?

\n

C++ 可执行文件既不独立于平台(它们依赖于操作系统),也不独立于机器(它们依赖于 CPU 架构)。它们特定于平台和机器。

\n

在实践中,如果你想在不同的平台或机器上运行 C++ 程序,通常需要针对每个特定的平台和架构重新编译它。

\n

请澄清事实真相:在这里,我想知道独立于机器的语言是什么样的。“x86-64 Windows”和“Arm Windows”是两个不同的平台,由于 CPU 架构不同,针对 x86-64 Windows 平台编译生成的可执行文件将无法在“ARM Windows”上执行。这表明C++是平台相关的;那么,我们如何在这里定义机器依赖或机器独立呢?如果一个平台的可执行文件不能在其他平台上运行,我们怎么能说C++是一种机器相关语言呢?

\n

c++ visual-c++ c++14 c++17 c++20

0
推荐指数
1
解决办法
340
查看次数

如何测试C++ STL函数的成功或失败(在Microsoft Visual C++ 6.0中)

在Microsoft Visual C++ 6.0 STL实现中,作为一个STL类的用户,您如何确定该函数是否已失败?

例如,vector::insert有这些原型:

void insert(iterator it, size_type n, const T& x);
void insert(iterator it, const_iterator first, const_iterator last);
Run Code Online (Sandbox Code Playgroud)

但是没有失败的返回值,并且在文档中没有提到抛出异常来指示失败.

有谁知道如何测试MSVC++ 6.0中这个或另一个STL类的失败?谢谢!

c++ visual-c++

-1
推荐指数
1
解决办法
172
查看次数

For循环初始化

所以我想知道我是否可以在for循环的声明中声明一个变量.这段代码有效吗?

for (int a = 0;a < len + 1;a++);
Run Code Online (Sandbox Code Playgroud)

在什么范围a内存在?它会在for循环之外无效,还是我仍然可以访问它?

另外,我是否可以在单个for循环语句中声明或初始化2个变量?

for (int a = 0, b = len + 1;a < b;a++);
Run Code Online (Sandbox Code Playgroud)

这是一个有效的陈述吗?

c++ loops for-loop visual-studio-2010 visual-c++

-1
推荐指数
1
解决办法
3159
查看次数

在Win32中确定ram中未使用的ram

我用这个例程用零填充未使用的ram.它在某些计算机上导致崩溃,并且粗糙大小=大小 - (大小/ 10); 有一种更准确的方法来确定要用零填充的未使用的RAM量?

DWORDLONG getTotalSystemMemory(){
    PROCESS_MEMORY_COUNTERS lMemInfo;
    BOOL success = GetProcessMemoryInfo(
        GetCurrentProcess(),
        &lMemInfo,
        sizeof(lMemInfo)
    ); 
    MEMORYSTATUSEX statex;
    statex.dwLength = sizeof(statex);
    GlobalMemoryStatusEx(&statex);
    wprintf(L"Mem: %d\n", lMemInfo.WorkingSetSize);
    return statex.ullAvailPhys - lMemInfo.WorkingSetSize;
}

void Zero(){
    int size =  getTotalSystemMemory();//-(1024*140000)
    size =  size - (size /10);
    //if(size>1073741824) size=1073741824; //2^32-1
    wprintf(L"Mem: %d\n", size);
    BYTE* ar = new BYTE[size];
    RtlSecureZeroMemory(ar,size);
    delete[] ar;
}
Run Code Online (Sandbox Code Playgroud)

windows ram visual-c++

-1
推荐指数
1
解决办法
354
查看次数

c ++编程问题

对于与"for"一起使用的表达式,我总是得到错误((IntelliSense:表达式必须是可修改的左值)),请帮忙.

for (c=2 ; c <= x -1 ; c++ )
    if ( x % c = 0 )
        cout << "not prime" ;
    else cout << "prime";
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

-1
推荐指数
1
解决办法
108
查看次数

-1
推荐指数
1
解决办法
3752
查看次数

为什么此代码无法打开文件以读取数据

我的代码有问题.为什么这段代码不能打开文件?谢谢

ofstream out("a.text");
while (i != 6)
{
    out << b[i] << ' ' ;
    i++ ;
}
out.close();
i = 0 ;
for ( i ; i < 6 ; i++)
{
    b[i] = 0 ;
}
ifstream in("a.txt"); // problem in this line
if(!in)
{
    cout << "error" ;
    cin.get();
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

从此代码导出:错误

c++ visual-c++

-1
推荐指数
1
解决办法
116
查看次数

为什么 VC++ 中有“表达式:在开始之前无法递减双端队列迭代器”的运行时断言?

void foo (std::deque<Class>& dq)
{
  auto it = dq.begin();
  --it;  // <--- asserts in VC++
  ...
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是一个过于简化的版本,但类似的情况也发生在我的代码中。它在 Ubuntu/Linux 中运行良好,但在 Visual Studio 中断言和中止程序。

表达式:无法在开始之前递减双端队列迭代器

有关程序如何导致断言失败的信息,请参阅 VC++ ...

即使我们没有寻找或取消引用迭代器的值,为什么它会将其视为运行时错误?

c++ iterator deque visual-c++ language-lawyer

-1
推荐指数
1
解决办法
160
查看次数

std::string 在 opencv 中被视为 cv::String

我在 Visual Studio 19 中有一个 C++20 控制台项目,具有发布配置和 /MT 标志。我在项目中明确指定类型的命名空间。当我创建时

std::string Foo, 
Run Code Online (Sandbox Code Playgroud)

它创建 std::string 类型。到目前为止,一切都很好。然而,当我创建

std::vector <std::string> Bar,
Run Code Online (Sandbox Code Playgroud)

相反,它创建了一种std::vector<cv::String>类型,这会导致不良后果。cv 命名空间来自 OpenCV4。不仅来自不同的命名空间,类型本身也以大写“S”开头。我的项目中的任何地方都没有任何“使用命名空间”或任何其他“使用”。

有任何想法吗?

我尝试在该行之前使用“using namespace std”,以防万一,但是,正如预期的那样,它不起作用。

我已经预料到了

std::vector <std::string> Bar 
Run Code Online (Sandbox Code Playgroud)

创建一个

std::vector <std::string>
Run Code Online (Sandbox Code Playgroud)

类型,我做错了什么?

c++ opencv namespaces visual-c++ visual-studio-2019

-1
推荐指数
1
解决办法
127
查看次数

返回 C++ 中的字符串数组、长度和损坏

我是一名 .NET 人员,正在深入研究 C++/微控制器领域。

以下是我正在尝试做的事情的模型。我有一个传入值的方法,并且根据该值我想返回一个不同的硬编码字符串数组。

当我单步执行此操作时,我的函数main()似乎可以工作,并且看起来我正在函数中返回正确的类型。我可以设置一个断点并查看files[0]是否是预期的字符串,files[1]是否是预期的字符串等。我可以单步执行循环并设置监视,files[i]然后我会看到适当的字符串。那里一切都很好。

那么两个问题:如何获取数组中有多少个元素?看了一百万个帖子,看来我做不到,对吧?我是否只需要一些在循环时需要检查的结束字符串(例如空字符串)?

其次,你会注意到我已经注释掉printf()了。当我启用该功能后,在单步执行后printf(),它会更改字符串的内容,但我不明白为什么要这样做。查看逐步执行之前/之后的图像以及手表的结果。我认为这可能是因为字符串没有以 a 隐式终止\0,但这没有效果。

#include <cstdlib>
#include <cstdio>

const char** GetSoundCategory(int category)
{
    const char* FILES1[3] = {
        "/myfile1.mp3",
        "/this_is_my_file.mp3",
        "/myfile9.mp3"
    };

    const char* FILES2[2] = {
        "/I love S.E.mp3",
         "/please_help_me.mp3"
    };   

    const char** ptr = nullptr;

    switch (category)
    {
        case 1:
            ptr = FILES1;
            break;
        case 2:
            ptr = FILES2;
            break;
    }
    return ptr;
}

int main()
{
    const …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

-1
推荐指数
1
解决办法
91
查看次数