为什么 CLion (cmake) 不需要包含<string>来构建,而 VS 需要?

Why CLion (cmake) doesn't require include <string> to build when VS does?

本文关键字:构建 VS 需要 gt string 不需要 cmake 包含 CLion 为什么 lt      更新时间:2023-10-16

为什么以下代码使用CLion构建而没有问题,但使用Visual Studio却失败了?

#include <iostream>
using namespace std;
int main() {
string str;
cout << "Enter your name:" << endl;
cin >> str;
getchar();
return 0;
}

为了使它与Visual Studio一起工作,我必须添加

#include <string>

两者都是使用过时版本的C++(2003)构建的,这是必需的。这是我的CLion 的CMakeLists.txt

cmake_minimum_required(VERSION 3.6)
project(foo)
set(CMAKE_CXX_FLAGS "--std=c++03")
set(SOURCE_FILES main.cpp)
add_executable(foo ${SOURCE_FILES})

它是CLion中的配置吗?它在CMake吗?

它是CLion中的配置吗?它在CMake吗?也不这是编译器之间的差异。

-drescherjm

允许但不要求标准标头包含其他标准标头。不同的实现具有不同的包含链。依赖于一个特定的依赖关系会使代码不可移植:aways为您使用的标准库的每个元素都包含适当的标准头。

-Igor Tandetnik

有办法强制执行吗?如果缺少这些包含,阿卡会让构建失败吗?

您可以尝试使用Include What You Use,但我不确定它是否可以检查这一点。引用自述:

"包括您使用的内容"意思是:对于在foo.cc(或foo.cpp)中使用的每个符号(类型、函数、变量或宏),foo.cc或foo.h都应该包含一个.h文件,该文件导出该符号的声明。(类似地,对于foo_test.cc,foo_test.c或foo.h都应该包含在内。)显然,在foo.cc中定义的符号被排除在这个要求之外。