类构造函数的char文字转换

时间:2017-04-02 12:02:09

标签: c++

我有一个名为A的类,它定义了一个字符串文字转换构造函数A::A(const char*)。构造函数使用strcpy()将字符串的副本存储到(私有变量)缓冲区。

我知道字符串文字的类型为const char[size],其中size是字符串文字的大小加上\0

我知道字符文字的类型为char

在主要功能中,我有以下statement

obj += ' ';(obj类型为A+=运算符也已定义)

这就是它变得有趣的地方。 如果我没有弄错的话,char literal应转换为A类型的对象,然后+=运算符将完成其工作。 不幸的是,conversion constructor永远不会被调用,我最终会在缓冲区中使用垃圾值。

为什么会这样?

编辑:

#include<iostream>
//other headers
class A {
public:
    //some constructors here
    //operators 
    A(const char* foo) {
        std::cout << "string literal conversion" << std::endl;
    }
    A(char foo) {
        std::cout << "char constructor" << std::endl;
    }
    //irrelevant but...
    A& operator +=(const A& a) {
        std::cout << "hiiii" << std::endl;
    }
private:
    char buf[1024];
};

obj += ' ';不会打印任何内容。

编辑2:解决方案 预处理程序指令正在内联+=的两种变体:

a)A& operator+=(const A&);

b)A& operator+=(char c);

因此这种奇怪的行为。

0 个答案:

没有答案