C ++ 17中带有字符串文字的CLion警告

时间:2019-05-25 16:45:33

标签: c++ cmake c++14 c++17 clion

我在CLion中遇到奇怪的行为。我有两个函数,它们分别以std::stringconst 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,该警告消失。代码正确吗?

2 个答案:

答案 0 :(得分:0)

您的环境似乎有问题。就我而言,效果很好。

enter image description here

系统配置

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生成的警告/错误是否有效,则可以尝试构建项目,如果实际的编译过程仅产生错误,则说明您的代码有问题。