c++ - 使用没有初始化的类成员函数

标签 c++ initialization declaration

<分区>

为什么可以在未初始化的对象上使用类成员函数(至少我相信它是未初始化的)。以下运行没有错误:

// A.h
class A {
 public:
  explicit A(int n) : n_(n) {};
  ~A() {};
  int foo() {
    return n_;
  };
  int bar(int i) {
    return i;
  };
 private:
  int n_;
};

// main.cc
#include <iostream>
#include "A.h"

int main(int argc, char **argv) {
  A *myClass;
  std::cout << myClass->bar(5) << "\n";
}

现在,肯定尝试 myClass->foo(); 失败了,但是为什么我们甚至可以使用 bar() ,因为我们只声明了一个指向A 存在,并且被称为myClass?这种编码风格是否可以接受/是否有理由使用这种方法?

最佳答案

why can we even use bar() when all we've declared is that a pointer to A exists, and is called myClass?

因为,一般来说,编译器不可能判断一个指针在运行时是否有效;因此不需要诊断此错误。但是,在这种情况下,只要您没有在禁用警告的情况下构建,一个体面的编译器应该能够发出警告。

Is this acceptable coding style/is there ever a reason to use this approach?

绝对不是。取消引用无效指针会产生未定义的行为。

关于c++ - 使用没有初始化的类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17976446/

相关文章:

c++ - 模板<类型名称 T> : only static data member templates are allowed

C++ Comparator 函数指定映射的特定键顺序?

c++ - 如何用 OpenCV 同时显示深度和彩色视频图像?

java - 在Java中初始化对象数组(有一个数组)

c++ - 为什么我不应该在 header 中初始化静态变量?

c++ - 为什么一些看起来像普通类型定义的表达式意外地变成了模板的声明?

java - Android Studio变量最终声明问题

c++ - 哈希表的复制构造函数

c - 编写一个 C 程序,根据给定的整数数组创建新数组,将所有偶数移到所有奇数之前

c - 调试器说我有未初始化的变量