我错误地将back()操作员返回的引用的地址放在一个空容器中,并且惊讶地发现该地址不为零.
如果一个容器例如std :: deque为空,那么back()返回什么?
可能是一个愚蠢的问题,但我找不到任何搜索...
是否有标准标题允许我获取当前时间?否则是否有一些跨平台的替代方案?
有人能用英语解释这里发生了什么吗?
std::vector<Cat*> cats; //I get that cats is a vector of Cat objects
if (std::find(cats.begin(), cats.end(), morris) == cats.end()) {
cats.push_back(morris);
}
Run Code Online (Sandbox Code Playgroud) 我有一个小项目,我需要比较一个流的第一个字节.问题是该字节可以是0xe5或任何其他不可打印的字符,因此表示该特定数据是坏的(一次读取32位).我可以允许的有效字符是AZ,az,0-9,'.' 和空间.
目前的代码是:
FILE* fileDescriptor; //assume this is already open and coming as an input to this function.
char entry[33];
if( fread(entry, sizeof(unsigned char), 32, fileDescriptor) != 32 )
{
return -1; //error occured
}
entry[32] = '\0'; //set the array to be a "true" cstring.
int firstByte = (int)entry[0];
if( firstByte == 0 ){
return -1; //the entire 32 bit chunk is empty.
}
if( (firstByte & 0xe5) == 229 ){ //denotes deleted.
return -1; //denotes deleted.
}
Run Code Online (Sandbox Code Playgroud)
所以问题在于,当我尝试执行以下操作时: …
当我在Linux上看到man sqrt时,我看到了3个函数的原型 -
double sqrt(double x);
float sqrtf(float x);
long double sqrtl(long double x);
Run Code Online (Sandbox Code Playgroud)
如果编译器/库是用C++编写的,我理解它可能正在使用函数重载.
如果提供它的编译器库是用C编写的,那么编译器(gcc)如何实现这种事情,就像C不支持的函数重载一样?(或者是否像C99这样的某些后来的C标准确实支持这样的东西?)
gcc实现了哪种编程语言?
我记得在某个会议上看过它,但找不到任何相关信息.
我想要的东西:
lock(_somelock)
{
if (_someBool)
return;
DoStuff();
} // Implicit unlock
Run Code Online (Sandbox Code Playgroud)
代替:
lock(_somelock);
if (_someBool)
{
unlock(_somelock);
return;
}
DoStuff();
unlock(_somelock);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,代码变得非常臃肿,有多个早期返回.显然,人们可以制作另一个功能来处理锁定/解锁,但它更好吗?
可以使用C++ 11标准库吗?
我正在用C++构建自己的终端应用程序项目,我问自己标准库是否有ifdef或ifndef预处理器指令.我想知道,因为我需要创建不同的头文件,需要一些标准库头文件,如"字符串"和其他一些,我不想包括相同的库3次或更多次,因为它使程序更重.
例如,我在我的头文件上写了这样的东西,以防止.h文件被包含多次:
#ifndef myheader_h
#define myheader_h
// my file code here
#endif
Run Code Online (Sandbox Code Playgroud)
我尝试编译,但编译器没有说错误或警告.
我还尝试阅读标准库源代码(https://en.cppreference.com/w/cpp/header),但我没有找到任何预处理器规则,如ifdef或ifndef.
我应该包括这样的标准库标题吗?
#ifndef string_h
#define string_h
#include <string>
#endif
Run Code Online (Sandbox Code Playgroud)
我希望我的问题还没有被问到,因为我在搜索时没有找到它.
对于那些说"你不在你需要担心的位置"的人,以及谁说"如果它有适当的包括警卫就花费很少",我的意思是:程序的沉重很重要,我想让它变得更轻松所以我不想多次完全包含同一个文件.有std lib文件正确包含警卫吗?(我的头文件有它们,不知道std lib文件)
功能iscntrl标准化。不幸的是,在 C99 上我们有:
iscntrl 函数测试任何控制字符
考虑到原型,int iscntrl(int c);我期待true0..31 或 127 之类的东西。然而在以下情况中:
#include <stdio.h>
#include <ctype.h>
int main()
{
int i;
printf("The ASCII value of all control characters are ");
for (i=0; i<=1024; ++i)
{
if (iscntrl(i)!=0)
printf("%d ", i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
The ASCII value of all control characters are 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
15 16 17 18 19 20 21 …Run Code Online (Sandbox Code Playgroud) 为什么下面的代码中有一个原子变量? - 因为它是更大的代码库的一部分,其中m_subscriptions数组是从多个线程更新的.请跟我一起 ..
这是我的问题:
#include <iostream>
#include <atomic>
#include <algorithm>
#include <iterator>
#define MAX_SUBSCRIPTIONS 45
static std::atomic<int> numberOfSubscriptions;
int main ()
{
int m_subscriptions[MAX_SUBSCRIPTIONS] = {};
numberOfSubscriptions.fetch_add(0, std::memory_order_relaxed);
m_subscriptions[numberOfSubscriptions] = 12;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 13;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 14;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 15;
numberOfSubscriptions.fetch_add(1);
m_subscriptions[numberOfSubscriptions] = 16;
numberOfSubscriptions.fetch_add(1);
for ( int i = 0; i < numberOfSubscriptions; i++ )
std::cout << m_subscriptions[ i ] << "\t ";
std::cout << std::endl;
auto result = std::find(m_subscriptions, m_subscriptions + numberOfSubscriptions, 44);
if …Run Code Online (Sandbox Code Playgroud) C代码:
#include<stdio.h>
#include<string.h>
#define STRINGS 10
#define STR_LEN 20
int main(void)
{
char words[STRINGS][STR_LEN];
char input[STR_LEN];
int i;
int mycount;
for(i = 0;i < STRINGS;++i;)
{
printf("Enter a word (or 0 to quit)\n:");
scanf("%19s", input);
if(input[0] == '0') break;
strncpy(words[i], input, STR_LEN);
mycount++;
}
printf("A total of %d strings were entered!\n",mycount);
}
Run Code Online (Sandbox Code Playgroud)
问题:当我运行此代码并输入一些字符串时,它不会打印出我输入的字符串数量
如何将自己的编程函数包含到标准 C (ANSI C) 库中?任何正在学习或从事 C 语言工作的人都可以随时随地使用这些功能,一般不需要开发。
示例:有人开发了名为“FunFun()”的函数,并假设它对大多数程序员来说都非常有用。那么,如何在不开发且仅包含标准库的情况下访问这个“FunFun”功能呢?