我有一个名为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);
因此这种奇怪的行为。