我在CLion中遇到奇怪的行为。我有两个函数,它们分别以std::string
和const std::string&
作为参数。我叫他们传递字符串文字。
我尝试使用不同版本的C ++:C ++ 17和C ++ 14
#include <iostream>
#include <string>
void print(std::string str){
std::cout<<str<<std::endl;
}
void print_ref(const std::string& str){
std::cout<<str<<std::endl;
}
int main() {
print("Hello World!");
print_ref("Hello World!");
return 0;
}
如果代码是C ++ 17,CLion(或更高级的IntelliSense)报告此警告Paramemeter type mismatch: Types 'std::string' and 'const char[13]' are not compatible
,但是如果我切换到C ++ 14,该警告消失。代码正确吗?
答案 0 :(得分:0)
您的环境似乎有问题。就我而言,效果很好。
系统配置
CLion
Version 2019.1.3 (CL-191.7141.37)
LLVM
Apple LLVM version 9.0.0 (clang-900.0.39.2)
答案 1 :(得分:0)
这似乎与CLions代码完成/棉绒功能有关。不知何故,lint并没有意识到虽然const char[]
和std::string
不是相同的类型,但是std::string
具有完全有效的隐式构造函数,这使得此代码可以正常工作。
我不太介意这种怪癖。作为一般的经验法则,如果不确定由这些类型的linter生成的警告/错误是否有效,则可以尝试构建项目,如果实际的编译过程仅产生错误,则说明您的代码有问题。