https://www.geeksforgeeks.org/introduction-to-c-programming-language/ \n在一些按键和功能下
\n\n\n机器独立但平台相关:C++ 可执行文件不是平台无关的(Linux 上编译的程序无法在 Windows 上运行\xe2\x80\x99),但它们是机器无关的。
\n
平台无关:这部分语句正确指出 C++ 可执行文件不是平台无关的。由于系统库、系统调用和可执行文件格式的差异,在一种操作系统(例如 Linux)上编译的程序通常不会直接在另一种操作系统(例如 Windows)上运行。
\n机器独立:本文中的术语“机器独立”可能会产生误导或不精确。编译的 C++ 可执行文件也不是真正独立于机器的。它们是机器相关的,因为它们被编译为特定于目标 CPU 架构的机器代码。例如,为 x86 架构编译的代码将无法在基于 ARM 的计算机上运行。
\n那么为什么在每一篇文章中都写到 C++ 是机器独立的呢?
\nC++ 可执行文件既不独立于平台(它们依赖于操作系统),也不独立于机器(它们依赖于 CPU 架构)。它们特定于平台和机器。
\n在实践中,如果你想在不同的平台或机器上运行 C++ 程序,通常需要针对每个特定的平台和架构重新编译它。
\n请澄清事实真相:在这里,我想知道独立于机器的语言是什么样的。“x86-64 Windows”和“Arm Windows”是两个不同的平台,由于 CPU 架构不同,针对 x86-64 Windows 平台编译生成的可执行文件将无法在“ARM Windows”上执行。这表明C++是平台相关的;那么,我们如何在这里定义机器依赖或机器独立呢?如果一个平台的可执行文件不能在其他平台上运行,我们怎么能说C++是一种机器相关语言呢?
\n在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类的失败?谢谢!
所以我想知道我是否可以在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)
这是一个有效的陈述吗?
我用这个例程用零填充未使用的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) 对于与"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++中的两个线程示例给我一个简单的死锁
我的代码有问题.为什么这段代码不能打开文件?谢谢
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)
从此代码导出:错误
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++ ...
即使我们没有寻找或取消引用迭代器的值,为什么它会将其视为运行时错误?
我在 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)
类型,我做错了什么?
我是一名 .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)