【问题标题】:CLion warning with string literals in C++17 [closed]C ++ 17中带有字符串文字的CLion警告[关闭]
【发布时间】:2019-05-25 16:45:33
【问题描述】:

我在 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,则警告会消失。代码正确吗?

【问题讨论】:

  • 是编译器警告(即在您构建代码后显示)还是 IntelliSense-whatever-it's-call-there 警告(将鼠标悬停在代码上时显示) ?
  • 你有什么问题?
  • 你需要#include &lt;string&gt;
  • @NeilButterworth 它不能解决问题
  • @NeilButterworth @eeroika @πάντα 谢谢。我已经添加了#include &lt;string&gt;,但是IntelliSense的警告仍然存在,那么我认为这只是一个CLion问题。

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


【解决方案1】:

这似乎是 CLions 代码完成/lint 功能的问题。不知何故,linter 没有意识到虽然 const char[]std::string 不是同一种类型,但 std::string 有一个完全有效的隐式构造函数,它可以让这段代码正常工作。

我不会太介意这些怪癖。作为一般经验法则,如果您不确定由这些类型的 linter 生成的警告/错误是否有效,那么只需尝试构建您的项目,如果实际编译过程仅产生错误,则说明您的代码在某种程度上是错误的。

【讨论】:

  • 你的身份证/头像太棒了
  • @Ric @Sombrero 太棒了:)
【解决方案2】:

您的环境中似乎存在问题。在我的情况下工作得很好。

系统配置

克利翁

Version 2019.1.3 (CL-191.7141.37)

LLVM

Apple LLVM version 9.0.0 (clang-900.0.39.2)

【讨论】:

  • 正如@Yksisarvinen 所说,能否请您分享一下您的 CLion 版本是什么?
  • @RiccardoMereu 好点!
  • 我刚刚更新了 CLion,警告消失了
猜你喜欢
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
相关资源
最近更新 更多