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 

相关文章:

  • 2021-06-07
  • 2022-12-23
  • 2021-07-20
  • 2021-08-28
  • 2021-12-20
  • 2021-12-02
  • 2021-07-18
  • 2022-01-22
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2021-09-23
  • 2021-11-01
  • 2022-12-23
相关资源
相似解决方案