c – 如何告诉编译器不要创建临时对象?

我正在改变一个过去采用整数参数的旧例程,以便它现在对一个对象进行const引用.我希望编译器会告诉我函数调用位置(因为参数类型错误),但是对象有一个构造函数,它接受一个整数,因此编译器创建一个临时对象,而不是失败,传递给它整数,并将对它的引用传递给例程.示例代码
class thing {
  public:
    thing( int x ) {
        printf( "Creating a thing(%d)\n",x );
    }
};

class X {
  public:
    X( const thing &t ) {
        printf( "Creating an X from a thing\n" );
    }
};


int main( int,char ** ) {
    thing a_thing( 5 );
    X an_x( 6 );
    return 1;
}

我希望X an_x(6)行不能编译,因为没有X构造函数接受int.但它确实编译,输出如下:

Creating a thing(5)
Creating a thing(6)
Creating an X from a thing

如何保留thing(int)构造函数,但不允许临时对象?

解决方法

在事物构造函数中使用explicit关键字.
class thing {
public:
    explicit thing( int x ) {
        printf( "Creating a thing(%d)\n",x );
    }
};

这将阻止编译器在找到整数时隐式调用thing构造函数.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...