错误的函数参数类型会导致对函数内cout输出的抑制吗?

时间:2019-04-28 09:40:39

标签: c++ cout

Compiler: g++ (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0

在回顾一些C ++基础知识期间,我编写了一个简单的字符交换函数,该函数将两个字符指针作为参数,然后在它们的位置交换值。

如果传递了指向数组索引的指针或引用,则交换函数中有一个cout语句,将相应地址处的值按预期输出到控制台。

但是,我遇到了一个“错误”,如果我尝试传递两个数组元素而不是元素的地址,该函数将按预期执行交换,但是控制台没有输出。

我本来希望对数组值进行解引用会导致seg-fault,但相反,编译器似乎知道了什么意思并按预期执行了交换。

最初,我认为可能没有刷新IO缓冲区,但是对cout.flush()的调用或输出std::endl的调用没有影响。

为什么这在运行时不会引起错误,为什么cout输出被抑制?

// swap.cpp
#include <iostream>
using namespace std; // Yes - you should not do this.

void swap(char* a, char* b) {
    cout << "Swapping: " << *a << ", " << *b << endl;
    char tmp = *a;
    *a = *b;
    *b = tmp;
}

int main(int argc, char* argv[]) {
    char str[] = "abc";
    cout << "Original: " << str << endl;

    swap(&str[0], &str[2]);
    cout << "Result A: " << str << endl;

    swap(str[0], str[2]); // no cout output from inside swap function
    cout << "Result B: " << str << endl;

    return 0;
}

输出:

Original: abc
Swapping: a, c
Result A: cba
Result B: abc

0 个答案:

没有答案