我正在查看 SO post C++ file stream open patterns ambiguity。我想知道fstream的默认文件打开模式。其中一个回答说,
以上暗示的是,以下代码使用完全相同的打开标志 fstream f("a.txt", ios_base::in | ios_base::out); 打开文件。ifstream g("a.txt", ios_base::out); ofstream h("a.txt", ios_base::in);
所以如果我理解正确的话,如果我创建 fstream 的对象,我应该能够读或写。
但下面的代码不会将任何数据写入文件
fstream testFile1;
testFile1.open("text1.txt");
testFile1<<"Writing data to file";
testFile1.close();
Run Code Online (Sandbox Code Playgroud)
但是,如下所示的添加模式会创建带有数据“将数据写入文件”的文本文件
testFile1.open("text1.txt", ios::out);
Run Code Online (Sandbox Code Playgroud)
那么默认模式是否是实现定义的?我正在使用 TDM-GCC-64 工具链。
我正在查看几篇关于使用基类指针指向派生类对象的好处的帖子(如下所列)。但大多数情况下,虚函数才是使用基类指针的最终目的。我对其中一些帖子添加了评论,但我想由于这些帖子已经过时,因此没有收到回复。现在我的问题是,如果我们不使用虚函数概念,在其他情况下使用基类指针是否有任何目的?
在下面的代码中,
pEmp->计算TotalSalary
由于缺少虚函数,因此调用基类函数。这是预期的行为。
#include <iostream>
using namespace std;
class Employee
{
public:
    void computeTotalSalary ()
    {
        cout<<"Computing Employee Salary in Base Class:"<<endl;
    }
};
class TeachingStaff : public Employee
{
public:
    // Override the function
    void computeTotalSalary ()
    {
        cout<<"Computing Teacher's Salary in Sub class: "<<endl;
    }
};
int main()
{
    TeachingStaff *pTeacher = new TeachingStaff() ;
    pTeacher->computeTotalSalary();
    Employee *pEmp;
    pEmp = pTeacher;
    pEmp->computeTotalSalary();
    pTeacher->Employee::computeTotalSalary();
}
Run Code Online (Sandbox Code Playgroud)
链接: 1.派生类为何使用基类指针
我写了一个简单的C程序来读取小时和分钟,然后将它们一起添加.但它没有被添加,currentHrMin只打印分钟的值.但是如果getCurrentDate(&dateParams)在打印后调用currentHrMin,则没有问题.我无法找出我的代码有什么问题.可能是一个愚蠢的问题.我正在使用MinGW C编译器.
#include <stdio.h>
#include <stdint.h>
#define BCD_TO_DEC(num) ((((num)&0xF0)>>4)*10+((num)&0x0F))
#define DEC_TO_BCD(num) ((((num)/10) << 4) | ((num) % 10))
struct RTC_TIME
{
    uint8_t hours;
    uint8_t minutes;
    uint8_t seconds;
    uint8_t twelveHourFormat:1; //1 = 12 hour format, 0=24 hour format.
    uint8_t AM_0_PM_1:1;
    uint8_t hours24Format;
    uint8_t alarm1State:1;
    uint8_t alarm2State:1;
};
struct RTC_DATE
{
    uint8_t date;
    uint8_t month;
    uint8_t dayOfWeek;
    uint8_t year;
};
void getCurrentTime(struct RTC_TIME* time)
{
    printf("Enter Hour: ");
    scanf("%d",&(time->hours));
    printf("Enter Min: ");
    scanf("%d",&(time->minutes));
}
void getCurrentDate(struct …Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我试图将函数指针分配给函数指针数组。我收到错误消息
错误:初始值设定项元素不是常数,然后一个注释说“stateTable2[1]”接近初始化。
在 中main,我尝试将函数指针分配给另一个函数指针,但没有问题。
void function1 (void) // Function definition
{
}
void function2 (void) // Function definition
{
}
void (*fptr)(void) = function2;
void (*stateTable2[]) (void) = {function1,fptr};
int main()
{
    void(*fp)(void) = fptr;
    return 0;
}
Run Code Online (Sandbox Code Playgroud) 我在其中一个旧文件中看到了一段代码.
void (*const m_exec[N_EXECS])(void) =
   {
       #define PROCESS_DEF_TIMED(name) name,   // defines macro for use in proclist.h
       #define PROCESS_TIMED                   // define switch for section in proclist.h
       #include "proclist.h"
       #undef PROCESS_TIMED                    // undefine switch
       #undef PROCESS_DEF_TIMED                // undefines macro
   }; 
Run Code Online (Sandbox Code Playgroud)
我无法理解这段代码的含义.这是一个带声明和函数定义的函数指针吗?但是,如果我尝试声明类似的函数指针,我得到编译错误
void (*voidFptr)(void) =
{
    printf("Hello\n");
}
Run Code Online (Sandbox Code Playgroud)
那么#define在这里是什么?为什么这是我不确定的功能.
在许多C表达式中,忽略空格(例如:在**b的情况下,其中b是指针,忽略空格).但在少数情况下,他们不容忽视.我们在x +++ y和相关(操作符中的c ++空间,规则是什么)上获得了很多SO帖子.我知道x +++ y的确意味着(x ++)+ Y,因为postfix的优先级更高.x ++ + y和x + ++ y之间也存在差异.因此,在c表达式中并不总是忽略空格.我想知道表达式中空格的规则是什么.在哪里定义?什么时候不被忽视?是两个运算符一个接一个地特别增加/减少运算符的时候?
我在http://www.geeksforgeeks.org/inheritance-in-c/中查看了继承概念.我对作者写的几句话很困惑.在一个地方作者说
如果我们从公共基类派生一个子类.然后基类的公共成员将在派生类中公开.......
这意味着我们在C++中有类似公共类的东西吗?文章下面的表格也表明有一个公共/受保护类的概念.

我查看了其他一些SO帖子(在派生类声明中使用"Public"?)并且没有找到对Public,Private或protected class本身的引用.帖子/sf/ask/335483011/谈论公开,但是通过头文件.
C++如何处理有问题的char的负值?行为是用C++ 11标准定义的吗?我正在使用MinGW C++ 11编译器.看起来有符号值通过添加256转换为无符号类型,然后打印扩展的ASCII字符.
signed char a=-35;
std::cout<<a;
Run Code Online (Sandbox Code Playgroud) 我在看序列点操作.在下面的代码中,i的值打印为1.但是我收到"在i上操作未定义"的警告消息.我当时认为虽然&运算符不是序列点,但是函数调用printf被认为是一个序列点,因此在%d期间我被完全评估.但为什么操作未定义?
int i = 0;
if((i++) & printf("i = %d\n",i))
{
    // Something
}
else
{
    // some code here
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我不确定为什么我会收到警告:当我评论printf("")时,迭代5u调用未定义的行为[-Waggressive-loop-optimizations]; for循环中的语句.printf语句如何对此警告做出贡献?
其次,这段代码无限循环.进入while循环时,我知道数组索引超出限制.但是当我消极时,循环应该已经终止.但没有发生.如果i--在进入while循环之前完成,则没有问题.如果索引超出范围,我应该只是将垃圾结果正确.但为何无穷无尽!
 int main (void)
{
   int a[]={4,6,8,2,7};
   int i=0;
   int size = sizeof(a)/sizeof(a[0]);
  for(i=0;i<size;i++)
   {
      // printf(" ");
   }
 // i--; // doing i-- works fine.
   while(i>=0)
    {
      printf("%d\t",a[i]);
      i--;
    }
  return(0);
}
Run Code Online (Sandbox Code Playgroud) c ×6
c++ ×4
mingw ×3
inheritance ×2
arrays ×1
bit ×1
c++11 ×1
codeblocks ×1
gcc ×1
scanf ×1
static ×1
struct ×1
tdm-gcc ×1
whitespace ×1