C++的隐式转换和explicit关键字

 1 class T
 2 {
 3 public:
 4     T(int t){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 int main()
11 {
12     T t(3);
13     foo(3); //此时会将3隐式转换为T
14 
15     return 0;
16 }
17 
通explicit关键字可以禁止这种隐式转换
 1 class T
 2 {
 3 public:
 4     explicit T(int t){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 
11 int main()
12 {
13     T t(3);
14     foo(3); //编译器报错error: conversion from ‘int’ to non-scalar type ‘T’ requested
15 
16     return 0;
17 }
看到过说对有多个参数的构造函数使用explicit是个语法错误。
但是用gcc好像这样不报错
g++ -O2 -Wall -o tt tt.cpp
 1 class T
 2 {
 3 public:
 4     explicit T(int t, int s){}
 5 };
 6 void foo(T t)
 7 {
 8     return;
 9 }
10 
11 int main()
12 {
13     T t(34);
14     return 0;
15 }
16 

posted on 2009-08-16 11:44  lbsx  阅读(556)  评论(0编辑  收藏  举报