编译期强制函数参数为字符串常量

简介: 设计一函数f(),使用得下面代码中的第一个f()调用可正常编译,而其它编译报错 #include stdio.h> #include string> int main() {     f(...
设计一函数f(),使用得下面代码中的第一个f()调用可正常编译,而其它编译报错
  1. #include stdio.h>
  2. #include string>
  3. int main()
  4. {
  5.     f("hello"); // 正常编译通过
  6.     
  7.     const char* str1 = "hello";
  8.     f(str1); // 编译报错: no matching function for call to
  9.     
  10.     std::string str2 = "hello";
  11.     f(str2); // 编译报错: no matching function for call to

  12.     return 0;
  13. }

满足上述目标的f()函数实现:
  1. template size_t N>
  2. void f(const char (&str)[N])
  3. {
  4.     printf("%s\n", str);
  5. }

代码中的f("hello")调用的函数真实原型为:
  1. void f(const char (&str)[6]);

也可以写成下面这样容易看的:
  1. typedef char X[6];
  2. void f(const X& str);








相关文章
C4.
|
1月前
|
存储 程序员 C语言
C语言中如何通过指针引用字符串
C语言中如何通过指针引用字符串
C4.
16 0
|
1月前
|
存储 程序员 C语言
C语言程序变量
C语言程序变量
8 2
|
1月前
|
存储 C语言
C语言变量和常量
C语言变量和常量
|
5月前
|
算法 C语言 C++
认识C语言 Day_1 >变量、常量
认识C语言 Day_1 >变量、常量
|
5月前
|
C++
38 C++ - 函数调用符号()重载
38 C++ - 函数调用符号()重载
18 0
|
7月前
|
C++
c++引用作为函数参数和函数返回值
c++引用作为函数参数和函数返回值
38 0
|
7月前
|
存储 人工智能 C语言
8.4 【C语言】通过指针引用字符串
8.4 【C语言】通过指针引用字符串
73 0
|
8月前
|
C语言
C语言变量常量
C语言变量常量
76 0
|
9月前
|
vr&ar C语言
教你快速了解C语言中的作用域和常量
教你快速了解C语言中的作用域和常量
82 0
|
9月前
|
C语言
C语言变量与常量
C语言变量与常量